weeek-mcp-server

AlekMel/weeek-mcp-server

3.2

If you are the rightful owner of weeek-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.

Weeek MCP Server is a comprehensive Model Context Protocol server designed for full integration with the Weeek API, providing seamless access to all endpoints as MCP tools for AI clients.

Tools
5
Resources
0
Prompts
0

🚀 Weeek MCP Server

Model Context Protocol (MCP) сервер для полной интеграции с Weeek API

Python 3.10+ MCP License: MIT


📋 Описание

Weeek MCP Server — это полнофункциональный MCP сервер на Python, который интегрирует все 71 endpoint Weeek API v1 и предоставляет их как MCP tools для использования с AI-клиентами (Claude Desktop, Perplexity, собственные MCP-клиенты и др.).

Ключевые возможности

  • 71 инструмент — полная интеграция всех endpoint'ов Weeek API
  • Надёжный HTTP-клиент с retry логикой и обработкой ошибок
  • Безопасность — автоматическое сокрытие токенов в логах
  • Типизация — полная поддержка type hints
  • Async/await — асинхронная архитектура
  • Docker поддержка — готовый Dockerfile
  • SSE транспорт — удалённый доступ через HTTP для n8n, web-клиентов

🛠 Установка

Требования

  • Python 3.10 или выше
  • pip (менеджер пакетов Python)
  • Аккаунт Weeek с API токеном

Шаг 1: Клонирование и установка

# Клонировать репозиторий
git clone https://github.com/your-repo/weeek-mcp-server.git
cd weeek-mcp-server

# Создать виртуальное окружение
python -m venv venv
source venv/bin/activate  # Linux/macOS
# или
venv\Scripts\activate  # Windows

# Установить зависимости
pip install -r requirements.txt

Шаг 2: Получение API токена

  1. Войдите в ваш аккаунт Weeek
  2. Перейдите в SettingsAPI
  3. Нажмите "Add token"
  4. Дайте токену имя и скопируйте его

Шаг 3: Настройка окружения

# Скопировать пример конфигурации
cp env.example .env

# Отредактировать .env файл
# Вставить ваш токен в WEEEK_TOKEN

Содержимое .env:

WEEEK_TOKEN=your-api-token-here
WEEEK_BASE_URL=https://api.weeek.net/public/v1
REQUEST_TIMEOUT=30
RETRY_ATTEMPTS=3
LOG_LEVEL=INFO

🚀 Запуск

Локальный запуск

python -m src.server

Через Docker

# Сборка образа
docker build -t weeek-mcp .

# Запуск с передачей токена
docker run -e WEEEK_TOKEN="your-token" -it weeek-mcp

# Или с использованием .env файла
docker run --env-file .env -it weeek-mcp

Docker Compose

# Создать .env файл из примера
cp env.example .env
# Отредактировать .env и добавить WEEEK_TOKEN

# Запуск
docker-compose up -d

# Или для сборки и запуска
docker-compose up --build -d

🌐 SSE режим (для удалённого доступа)

MCP сервер поддерживает два режима работы:

  • stdio (по умолчанию) — для локальных клиентов (Claude Desktop, Cursor)
  • sse — для сетевого доступа через HTTP (n8n, удалённые клиенты)

Настройка SSE

# В .env файле
TRANSPORT=sse
SERVER_HOST=0.0.0.0
SERVER_PORT=3847

Деплой на VPS через Docker

  1. Подготовка VPS:
# Склонировать репозиторий на VPS
git clone https://github.com/your-repo/weeek-mcp-server.git
cd weeek-mcp-server

# Создать .env файл
cp env.example .env
nano .env
  1. Настройка .env (ОБЯЗАТЕЛЬНО):
WEEEK_TOKEN=ваш-weeek-api-токен
TRANSPORT=sse
MCP_API_KEY=ваш-секретный-ключ-минимум-32-символа

Генерация безопасного API ключа:

python -c "import secrets; print(secrets.token_urlsafe(32))"
# Пример: Kx7mN9pQ2rS5tU8vW0xY3zA6bC9dE2fG
  1. Запуск:
docker-compose up -d --build
  1. Проверка работы:
# Проверить статус
docker-compose ps

# Просмотр логов
docker-compose logs -f

# Проверить health endpoint (без авторизации)
curl http://localhost:3847/health

# Проверить SSE endpoint (с авторизацией)
curl -H "Authorization: Bearer YOUR_MCP_API_KEY" http://localhost:3847/sse

Доступные endpoints

EndpointОписаниеАвторизация
http://host:3847/sseSSE endpoint для подключения MCP клиентовТребуется
http://host:3847/messagesEndpoint для отправки сообщенийТребуется
http://host:3847/healthHealth check endpointНе требуется

Аутентификация

Все запросы к /sse и /messages требуют API ключ. Передавайте его одним из способов:

# Способ 1: Authorization header (рекомендуется)
curl -H "Authorization: Bearer YOUR_MCP_API_KEY" http://host:3847/sse

# Способ 2: X-API-Key header
curl -H "X-API-Key: YOUR_MCP_API_KEY" http://host:3847/messages

Смена порта

Если порт 3847 занят, измените в .env:

SERVER_PORT=9999

И в docker-compose.yml обновите порты:

ports:
  - "9999:9999"

🔗 Интеграция с n8n

Подключение MCP сервера к n8n

  1. Убедитесь, что MCP сервер запущен в SSE режиме на VPS

  2. В n8n используйте HTTP Request ноду для вызова MCP endpoints:

URL: http://your-vps-ip:3847/messages
Method: POST
Headers:
  Content-Type: application/json
  Authorization: Bearer YOUR_MCP_API_KEY
Body (JSON):
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_tasks",
    "arguments": {
      "project_id": "your-project-id",
      "limit": 10
    }
  }
}
  1. Настройка HTTP Request ноды в n8n:

    • Method: POST
    • URL: http://your-vps-ip:3847/messages
    • Authentication: Predefined Credential Type → Header Auth
      • Name: Authorization
      • Value: Bearer YOUR_MCP_API_KEY
    • Body Content Type: JSON
  2. Пример Code ноды с авторизацией:

// Вызов MCP tool из n8n Code ноды
const MCP_API_KEY = 'your-mcp-api-key';  // Лучше хранить в credentials

const response = await $http.request({
  method: 'POST',
  url: 'http://your-vps-ip:3847/messages',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${MCP_API_KEY}`
  },
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: Date.now(),
    method: 'tools/call',
    params: {
      name: 'create_task',
      arguments: {
        title: 'Task from n8n',
        project_id: 'proj_123',
        priority: 'high'
      }
    }
  })
});

return response.data;

Примеры вызовов из n8n

Создание задачи:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "create_task",
    "arguments": {
      "title": "New task from n8n workflow",
      "project_id": "7",
      "description": "Created automatically",
      "priority": "medium"
    }
  }
}

Получение списка проектов:

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "list_projects",
    "arguments": {
      "limit": 50
    }
  }
}

Поиск задач:

{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "search_task_global",
    "arguments": {
      "q": "urgent"
    }
  }
}

Firewall / Безопасность

Для продакшена рекомендуется:

  1. Настроить firewall — открыть порт только для IP n8n сервера:
# UFW (Ubuntu)
ufw allow from YOUR_N8N_IP to any port 3847

# iptables
iptables -A INPUT -p tcp -s YOUR_N8N_IP --dport 3847 -j ACCEPT
iptables -A INPUT -p tcp --dport 3847 -j DROP
  1. Использовать reverse proxy (nginx) с SSL:
server {
    listen 443 ssl;
    server_name mcp.yourdomain.com;
    
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    
    location / {
        proxy_pass http://localhost:3847;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_buffering off;
        proxy_cache off;
    }
}

🔧 Интеграция с MCP клиентами

Вариант 1: Локальный запуск (stdio)

Для локального запуска без Docker используйте stdio транспорт.

Claude Desktop

Файл конфигурации:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Linux: ~/.config/claude/claude_desktop_config.json
{
  "mcpServers": {
    "weeek": {
      "command": "python",
      "args": ["-m", "src.server"],
      "cwd": "/path/to/weeek-mcp-server",
      "env": {
        "WEEEK_TOKEN": "your-api-token-here"
      }
    }
  }
}
Cursor IDE

Добавьте в .cursor/mcp.json:

{
  "mcpServers": {
    "weeek": {
      "command": "python",
      "args": ["-m", "src.server"],
      "cwd": "/path/to/weeek-mcp-server",
      "env": {
        "WEEEK_TOKEN": "your-api-token-here"
      }
    }
  }
}

Вариант 2: Подключение к локальному Docker (SSE)

Если MCP сервер запущен в Docker на том же компьютере, используйте SSE транспорт.

1. Запустите Docker контейнер
cd weeek-mcp-server

# Создайте .env с настройками
cp env.example .env
# Отредактируйте: добавьте WEEEK_TOKEN и MCP_API_KEY

# Запустите контейнер
docker-compose up -d --build
2. Настройка Claude Desktop (SSE)
{
  "mcpServers": {
    "weeek": {
      "url": "http://localhost:3847/sse",
      "headers": {
        "Authorization": "Bearer YOUR_MCP_API_KEY"
      }
    }
  }
}

Примечание: Замените YOUR_MCP_API_KEY на значение из вашего .env файла.

3. Настройка Cursor IDE (SSE)

В файле .cursor/mcp.json:

{
  "mcpServers": {
    "weeek": {
      "url": "http://localhost:3847/sse",
      "headers": {
        "Authorization": "Bearer YOUR_MCP_API_KEY"
      }
    }
  }
}
4. Проверка подключения
# Проверить что контейнер запущен
docker-compose ps

# Проверить health endpoint
curl http://localhost:3847/health

# Проверить SSE с авторизацией
curl -H "Authorization: Bearer YOUR_MCP_API_KEY" http://localhost:3847/sse

После настройки перезапустите Claude Desktop или Cursor для применения изменений.


Вариант 3: Подключение к удалённому серверу (SSE)

Для подключения к MCP серверу на VPS используйте его внешний IP или домен.

Claude Desktop
{
  "mcpServers": {
    "weeek": {
      "url": "http://YOUR_VPS_IP:3847/sse",
      "headers": {
        "Authorization": "Bearer YOUR_MCP_API_KEY"
      }
    }
  }
}
Cursor IDE
{
  "mcpServers": {
    "weeek": {
      "url": "http://YOUR_VPS_IP:3847/sse",
      "headers": {
        "Authorization": "Bearer YOUR_MCP_API_KEY"
      }
    }
  }
}

С SSL (рекомендуется для продакшена):

{
  "mcpServers": {
    "weeek": {
      "url": "https://mcp.yourdomain.com/sse",
      "headers": {
        "Authorization": "Bearer YOUR_MCP_API_KEY"
      }
    }
  }
}

📚 Полный список инструментов (71 tool)

Workspace (1)

ToolОписание
get_workspaceПолучить информацию о рабочем пространстве

Users (5)

ToolОписание
get_current_userПолучить текущего пользователя
list_usersСписок пользователей
get_user_by_idПолучить пользователя по ID
update_userОбновить пользователя
delete_userУдалить пользователя

Tags (4)

ToolОписание
list_tagsСписок тегов
create_tagСоздать тег
update_tagОбновить тег
delete_tagУдалить тег

Custom Fields (4)

ToolОписание
list_custom_fieldsСписок пользовательских полей
create_custom_fieldСоздать поле
update_custom_fieldОбновить поле
delete_custom_fieldУдалить поле

Currencies (1)

ToolОписание
list_currenciesСписок валют

Projects (5)

ToolОписание
list_projectsСписок проектов
get_project_by_idПолучить проект
create_projectСоздать проект
update_projectОбновить проект
delete_projectУдалить проект

Portfolio (4)

ToolОписание
list_portfolioСписок портфелей
create_portfolioСоздать портфель
update_portfolioОбновить портфель
delete_portfolioУдалить портфель

Boards (5)

ToolОписание
list_boardsСписок досок
get_board_by_idПолучить доску
create_boardСоздать доску
update_boardОбновить доску
delete_boardУдалить доску

Board Columns (5)

ToolОписание
list_board_columnsСписок столбцов
get_board_column_by_idПолучить столбец
create_board_columnСоздать столбец
update_board_columnОбновить столбец
delete_board_columnУдалить столбец

Tasks (7) ⭐

ToolОписание
list_tasksСписок задач с фильтрацией
get_task_by_idПолучить задачу
create_taskСоздать задачу
update_taskОбновить задачу
delete_taskУдалить задачу
search_task_in_projectПоиск в проекте
search_task_globalГлобальный поиск

Funnels (5)

ToolОписание
list_funnelsСписок воронок
get_funnel_by_idПолучить воронку
create_funnelСоздать воронку
update_funnelОбновить воронку
delete_funnelУдалить воронку

Funnel Statuses (5)

ToolОписание
list_funnel_statusesСписок статусов
get_funnel_status_by_idПолучить статус
create_funnel_statusСоздать статус
update_funnel_statusОбновить статус
delete_funnel_statusУдалить статус

Deals (5)

ToolОписание
list_dealsСписок сделок
get_deal_by_idПолучить сделку
create_dealСоздать сделку
update_dealОбновить сделку
delete_dealУдалить сделку

Organizations (5)

ToolОписание
list_organizationsСписок организаций
get_organization_by_idПолучить организацию
create_organizationСоздать организацию
update_organizationОбновить организацию
delete_organizationУдалить организацию

Contacts (5)

ToolОписание
list_contactsСписок контактов
get_contact_by_idПолучить контакт
create_contactСоздать контакт
update_contactОбновить контакт
delete_contactУдалить контакт

Attachments (3)

ToolОписание
get_attachmentПолучить вложение
upload_attachmentЗагрузить файл
delete_attachmentУдалить вложение

Tag Extras (2)

ToolОписание
get_tag_detailsДетали тега
get_tasks_by_tagЗадачи по тегу

💡 Примеры использования

Создание задачи с приоритетом

# Через MCP клиент
result = await mcp_client.call("create_task", {
    "title": "Implement user authentication",
    "project_id": "proj_abc",
    "description": "Add OAuth2 integration",
    "priority": "high",
    "due_date": "2025-12-31",
    "assigned_to": "user_123",
    "tags": ["backend", "security"]
})

Поиск задач

# Найти высокоприоритетные открытые задачи
tasks = await mcp_client.call("list_tasks", {
    "project_id": "proj_abc",
    "status": "open",
    "priority": "high",
    "search": "bug",
    "limit": 10
})

Управление сделками

# Создать сделку
deal = await mcp_client.call("create_deal", {
    "title": "Enterprise License",
    "funnel_id": "funnel_123",
    "status_id": "status_new",
    "amount": 50000,
    "currency": "USD",
    "contact_id": "contact_456"
})

# Переместить сделку в другой статус
await mcp_client.call("update_deal", {
    "deal_id": deal["id"],
    "status_id": "status_won"
})

Работа с контактами

# Создать контакт
contact = await mcp_client.call("create_contact", {
    "first_name": "John",
    "last_name": "Doe",
    "email": "john@example.com",
    "organization_id": "org_123"
})

# Получить контакты организации
contacts = await mcp_client.call("list_contacts", {
    "organization_id": "org_123",
    "limit": 20
})

🧪 Тестирование

Запуск интеграционных тестов

# Установить токен и запустить тесты
WEEEK_TOKEN="your-token" python tests/test_integration.py

Чеклист тестирования

  • Workspace info
  • User operations
  • Project CRUD
  • Task CRUD
  • Tag operations
  • Board operations
  • Funnel & Deal operations
  • Contact & Organization operations
  • Error handling (401, 404, 429)

🔒 Безопасность

  • ✅ Токены никогда не логируются (автоматическая редакция)
  • ✅ Все данные передаются через HTTPS
  • ✅ Поддержка переменных окружения для секретов
  • ✅ Валидация всех входных данных

📁 Структура проекта

weeek-mcp-server/
├── README.md                 # Документация
├── requirements.txt          # Зависимости
├── env.example               # Пример конфигурации
├── .env                      # Локальная конфигурация (не в git)
├── .gitignore
├── Dockerfile                # Docker образ
├── docker-compose.yml        # Docker Compose конфигурация
├── .dockerignore             # Исключения для Docker
├── run_server.py             # Скрипт запуска
├── src/
│   ├── __init__.py
│   ├── server.py             # MCP сервер
│   ├── weeek_client.py       # HTTP клиент
│   ├── config.py             # Конфигурация
│   ├── tools/                # Все MCP инструменты
│   │   ├── workspace_tools.py
│   │   ├── user_tools.py
│   │   ├── tag_tools.py
│   │   ├── task_tools.py
│   │   └── ...
│   ├── schemas/
│   │   └── models.py         # Pydantic модели
│   └── utils/
│       ├── errors.py         # Обработка ошибок
│       └── logger.py         # Логирование
└── tests/
    └── test_integration.py   # Интеграционные тесты

🐛 Обработка ошибок

Сервер обрабатывает все типы ошибок Weeek API:

HTTP кодОшибкаОписание
400WeeekValidationErrorНеверные параметры запроса
401WeeekAuthErrorПроблема с токеном
403WeeekForbiddenErrorНет прав доступа
404WeeekNotFoundErrorРесурс не найден
429WeeekRateLimitErrorПревышен лимит запросов
5xxWeeekServerErrorОшибка сервера Weeek

🤝 Contributing

  1. Fork репозитория
  2. Создайте feature branch (git checkout -b feature/amazing)
  3. Commit изменения (git commit -m 'Add amazing feature')
  4. Push в branch (git push origin feature/amazing)
  5. Откройте Pull Request

📄 License

MIT License - см. файл.


📞 Поддержка


Made with ❤️ for the Weeek community