Communication Python ★ 527

joinly-ai/joinly

Tarayıcı tabanlı toplantı platformlarıyla (Zoom, Teams, Google Meet) etkileşim kurmak için MCP server. AI ajanlarının çevrimiçi toplantılara bot göndermesine, canlı transkriptleri toplamasına, metni seslendirmesine ve toplantı sohbetinde mesaj göndermesine olanak tanır.

Claude Desktop config.json'a ekle

{
  "mcpServers": {
    "joinly-ai-joinly": {
      "command": "python",
      "args": [
        "-m",
        "joinly"
      ]
    }
  }
}

</picture>

GitHub Release GitHub License GitHub Repo stars Discord GitHub Discussions joinly cloud

Toplantılarınızı AI Ajanlarına Erişilebilir Hale Getirin 🤖

joinly.ai, AI ajanlarının video çağrılarına katılmasını ve aktif olarak katılmasını sağlamak için tasarlanmış bir connector middleware'dir. MCP server'ı aracılığıyla joinly.ai, herhangi bir AI ajanını toplantılarınızda gerçek zamanda görevleri gerçekleştirme ve sizinle etkileşim kurma becerileriyle donatabilecek temel meeting tools ve resources sağlar.

Hemen başlamak mı istiyorsunuz? Quickstart bölümüne gidin! Daha fazla bilgi mi istiyorsunuz? Web sitemizi ziyaret edin!

[!IMPORTANT]
Her şeyi kurmak istemiyorsunuz? Önce cloud versiyonunu deneyin! ☁️🚀

:sparkles: Özellikler

  • Canlı Etkileşim: Ajanlarınızın toplantılarınız içinde sesli veya chat yoluyla görevleri gerçek zamanda gerçekleştirmesini ve yanıt vermesini sağlar
  • Konuşmacı akışı: Kesintileri ve çok konuşmacılı etkileşimleri ele alarak doğal konuşmaları sağlayan yerleşik mantık
  • Çoklu platform: Google Meet, Zoom ve Microsoft Teams'e katılın (veya tarayıcıda bulunan herhangi biri)
  • Kendi LLM'nizi getirin: Tüm LLM sağlayıcılarıyla çalışır (ayrıca Ollama ile yerel olarak)
  • Tercih ettiğiniz TTS/STT'yi seçin: Modüler tasarım birden fazla hizmeti destekler - STT için Whisper/Deepgram ve TTS için Kokoro/ElevenLabs/Deepgram (ve daha fazlası yakında...)
  • %100 açık kaynak, kendi barındırma ve gizlilik odaklı :rocket:

:video_camera: Demolar

GitHub

GitHub Demo

Bu demo videosunda, joinly "Joinly nedir?" sorusunu web'den en son haberlere erişerek yanıtlar. Daha sonra bir GitHub demo repository'sinde bir issue oluşturur.

Notion

Notion Demo

Bu demo videosunda, joinly'i MCP aracılığıyla notion'a bağlarız ve bir sayfa içeriğini toplantı sırasında canlı olarak düzenlemesini sağlarız.

Sırada ne inşa etmeliyiz hakkında bir fikiniz var mı? Bize yazın! :rocket:

:zap: Quickstart

joinly'i Docker ile temel bir konuşmacı ajan istemcisi kullanarak çalıştırın.

[!IMPORTANT] Ön Koşullar: Docker kurulumu

Yeni bir joinly klasörü oluşturun veya bu repository'yi klonlayın (aşağıdaki adımlar için zorunlu değil). Bu dizinde, kullanmak istediğiniz LLM sağlayıcısı için geçerli bir API anahtarı ile yeni bir .env dosyası oluşturun, örneğin OpenAI:

[!TIP] OpenAI API anahtarını burada bulabilirsiniz

# .env
# OpenAI LLM için
# anahtarı ve modeli istediğiniz olanla değiştirin
JOINLY_LLM_MODEL=gpt-4o
JOINLY_LLM_PROVIDER=openai
OPENAI_API_KEY=your-openai-api-key

[!NOTE] Anthropic (Claude) ve Ollama kurulumları da dahil olmak üzere tam konfigürasyon seçenekleri için .env.example dosyasına bakın. Placeholder değerlerini gerçek API anahtarlarınız ile değiştirin ve model adını gerektiği gibi ayarlayın. Kullanmadığınız sağlayıcıların placeholder değerlerini silin.

Docker image'ını çekin (~2.3GB, tarayıcı ve modelleri içerdiği için):

docker pull ghcr.io/joinly-ai/joinly:latest

Zoom, Google Meet veya Teams'de bir toplantı başlatın ve joinly'in toplantı linkini <MeetingURL> olarak kullanarak toplantıya katılmasını sağlayın. Daha sonra, .env dosyasını oluşturduğunuz klasörden aşağıdaki komutu çalıştırın:

docker run --env-file .env ghcr.io/joinly-ai/joinly:latest --client <MeetingURL>

:red_circle: Başlamakta sorun mu yaşıyorsunuz? Birlikte çözelim discord kanalımızda!

:technologist: Harici istemci çalıştırma

Quickstart'ta, Docker Container'ı doğrudan --client kullanarak istemci olarak çalıştırdık. Ancak aynı zamanda bunu bir sunucu olarak çalıştırabiliriz ve container dışından buna bağlanabiliriz, bu da diğer MCP sunucularını bağlamamızı sağlar. Burada joinly-client paketi kullanarak harici bir istemci çalıştırır ve bunu joinly MCP server'ına bağlarız.

[!IMPORTANT] Ön Koşullar: Quickstart bölümünü (son komut hariç) yapın, uv'yi yükleyin ve iki terminal açın

Birinci terminalde joinly server'ını başlatın (dikkat, burada --client kullanmıyoruz ve 8000 portunu iletiyoruz):

docker run -p 8000:8000 ghcr.io/joinly-ai/joinly:latest

Server çalışırken, ikinci terminal penceresinde örnek istemci implementasyonunu başlatarak buna bağlanın ve bir toplantıya katılın:

uvx joinly-client --env-file .env <MeetingUrl>

MCP sunucularını istemciye ekleyin

Herhangi bir MCP server'ının araçlarını JSON konfigürasyonu sağlayarak ajana ekleyin. Konfigürasyon dosyası "mcpServers" altında birden fazla entry içerebilir ve hepsi toplantıda araç olarak kullanılabilir (sözdizimi için fastmcp client docs bölümüne bakın):

{
    "mcpServers": {
        "localServer": {
            "command": "npx",
            "args": ["-y", "package@0.1.0"]
        },
        "remoteServer": {
            "url": "http://mcp.example.com",
            "auth": "oauth"
        }
    }
}

Örneğin web arama için bir Tavily config ekleyin, sonra istemciyi config.json adlı config dosyası kullanarak çalıştırın:

uvx joinly-client --env-file .env --mcp-config config.json <MeetingUrl>

:wrench: Konfigürasyonlar

Konfigürasyonlar çevre değişkenleri ve/veya komut satırı argümanları aracılığıyla verilebilir. Burada, Docker container'ını başlatırken kullanılabilecek ortak konfigürasyon seçeneklerinin bir listesi bulunmaktadır:

docker run --env-file .env -p 8000:8000 ghcr.io/joinly-ai/joinly:latest <MyOptionArgs>

Alternatif olarak, joinly-client kullanarak --name, --lang ve provider settings komut satırı argümanları olarak iletebilirsiniz, bu da server ayarlarını geçersiz kılar:

uvx joinly-client <MyOptionArgs> <MeetingUrl>

Temel Ayarlar

Genel olarak, docker image varsayılan olarak başlatılan bir MCP server'ı sağlar. Ancak hızlı bir şekilde başlamak için --client aracılığıyla kullanılabilecek bir istemci implementasyonu da ekledik. Bu durumda hiçbir server başlatılmaz ve buna başka bir istemci bağlanamaz.

# Doğrudan istemci olarak başlat; varsayılan, harici bir istemcinin bağlanabileceği server'dır
--client <MeetingUrl>

# Katılımcı adını değiştir (varsayılan: joinly)
--name "AI Assistant"

# TTS/STT dilini değiştir (varsayılan: en)
# Not: kullanılabilirlik TTS/STT sağlayıcısına bağlıdır
--lang de

# joinly MCP server'ının host ve port'unu değiştir
--host 0.0.0.0 --port 8000

Sağlayıcılar

Metinden Konuşmaya

# Kokoro (yerel) TTS (varsayılan)
--tts kokoro
--tts-arg voice=<VoiceName>  # isteğe bağlı olarak, farklı ses ayarla

# ElevenLabs TTS, .env'ye ELEVENLABS_API_KEY ekleyin
--tts elevenlabs
--tts-arg voice_id=<VoiceID>  # isteğe bağlı olarak, farklı ses ayarla

# Deepgram TTS, .env'ye DEEPGRAM_API_KEY ekleyin
--tts deepgram
--tts-arg model_name=<ModelName>  # isteğe bağlı olarak, farklı model (ses) ayarla

Transkripsiyon

# Whisper (yerel) STT (varsayılan)
--stt whisper
--stt-arg model_name=<ModelName>  # isteğe bağlı olarak, farklı model ayarla (varsayılan: base), GPU desteği için aşağıya bakın

# Deepgram STT, .env'ye DEEPGRAM_API_KEY ekleyin
--stt deepgram
--stt-arg model_name=<ModelName>  # isteğe bağlı olarak, farklı model ayarla

Hata Ayıklama

# Hata ayıklama için VNC server'ı olan tarayıcıyı başlat;
# portu ilet ve bir VNC istemcisi kullanarak bağlan
--vnc-server --vnc-server-port 5900

# Logging
-v  # veya -vv, -vvv

# Yardım
--help

GPU Desteği

Transkripsiyon ve TTS modellerini bir GPU'da çalıştırmak için CUDA GPU desteğine sahip bir Docker image sağlıyoruz. Bunu kullanmak için NVIDIA Container Toolkit yüklü olması ve CUDA >= 12.6 gerekir. Daha sonra CUDA etkinleştirilmiş image'ını çekin:

docker pull ghcr.io/joinly-ai/joinly:latest-cuda

Yukarıdaki komutlar ile aynı komutlar kullanarak istemci veya server olarak çalıştırın, ancak joinly:{version}-cuda image'ını kullanın ve --gpus all ayarlayın:

# Server olarak çalıştır
docker run --gpus all --env-file .env -p 8000:8000 ghcr.io/joinly-ai/joinly:latest-cuda -v
# İstemci olarak çalıştır
docker run --gpus all --env-file .env ghcr.io/joinly-ai/joinly:latest-cuda -v --client <MeetingURL>

Varsayılan olarak, joinly image'ı transkripsiyon için base Whisper modelini kullanır, çünkü CPU'da hala makul bir hızda çalışır. cuda için, önemli ölçüde daha iyi transkripsiyon kalitesi için otomatik olarak distil-large-v3 olarak ayarlanır. Model'i --stt-arg model_name=<model_name> ayarlayarak değiştirebilirsiniz (örneğin, --stt-arg model_name=large-v3). Ancak, docker image'da yalnızca ilgili varsayılan modeller paketlenmiştir, bu nedenle container başlangıcında model ağırlıklarını indirmeye başlayacaktır.

:test_tube: Kendi ajanınızı oluşturun

Ayrıca kendi ajanınızı yazabilir ve bunu joinly MCP server'ına bağlayabilirsiniz. joinly-client paketi için code examples bölümüne veya client_example.py dosyasına bakın, eğer framework'ümüze bağlı olmayan bir başlangıç noktası istiyorsanız.

joinly MCP server'ı aşağıdaki araçları ve kaynakları sağlar:

Araçlar

  • join_meeting - URL, katılımcı adı ve isteğe bağlı şifre ile toplantıya katıl
  • leave_meeting - Mevcut toplantıdan ayrıl
  • speak_text - Metni TTS kullanarak seslendir (text parametresi gerekli)
  • send_chat_message - Chat mesajı gönder (message parametresi gerekli)
  • mute_yourself - Mikrofonu kapat
  • unmute_yourself - Mikrofonu aç
  • get_chat_history - Mevcut toplantı chat geçmişini JSON formatında al
  • get_participants - Mevcut toplantı katılımcılarını JSON formatında al
  • get_transcript - Mevcut toplantı transkriptini JSON formatında al, isteğe bağlı olarak dakikalar ile filtrele
  • get_video_snapshot - Mevcut toplantıdan bir görüntü al, örneğin mevcut screenshare'i görüntüle

Kaynaklar

  • transcript://live - Canlı toplantı transkripti JSON formatında, zaman damgaları ve konuşmacı bilgileri dahil. Yeni ses parçaları eklendiğinde gerçek zamanlı güncellemeler için abone olunabilir.

:building_construction: joinly.ai Geliştirme

Geliştirme için gerekli tüm bağımlılıkları yükleyen development container'ını kullanmanızı öneriyoruz. Başlamak için, Visual Studio Code için DevContainer Extension'ını yükleyin, repository'yi açın ve Reopen in Container seçeneğini seçin.

Kurulum biraz zaman alabilir, çünkü tüm paketleri ve Whisper/Kokoro için modelleri ve Chromium tarayıcısını indirir. Sonunda, download_assets.py betiğini otomatik olarak çağırır. Missing kokoro-v1.0.onnx gibi hatalar görürseniz, şu komutu kullanarak bu betiği manuel olarak çalıştırın:

uv run scripts/download_assets.py

Onunla ne yaptığınızı veya ne inşa ettiğinizi görmek isteyiz. Çalışmanızı discord kanalımızda sergileyin

:pencil2: Yol Haritası

Toplantı

  • [x] Toplantı chat erişimi
  • [ ] Video çağrıda kamera ve durum güncellemeleri
  • [ ] Video konferansları sırasında ekran paylaşımını etkinleştir
  • [ ] Katılımcı metadata'sı ve katılma/ayrılma
  • [ ] Tarayıcı ajan yeteneklerini iyileştir

Konuşma

  • [x] Transkripsiyon için konuşmacı özelliği
  • [ ] İstemci belleğini iyileştir: token kullanımını azalt, toplantılar arasında kalıcılığa izin ver
  • [ ] Utterance sonu/tur alma algılamasını iyileştir
  • [ ] Toplantı içinden insan onay mekanizması

Entegrasyonlar

  • [ ] A2A protokolü kullanarak ajanların nasıl ekleneceğini göster
  • [ ] Daha fazla sağlayıcı entegrasyonu ekle (STT, TTS)
  • [ ] Toplantı platformu SDK'larını entegre et
  • [ ] Alternatif açık kaynak toplantı sağlayıcısı ekle
  • [ ] Konuşma2Konuşma modelleri için destek ekle

:busts_in_silhouette: Katkıda Bulunma

Katkılar her zaman hoşlanır! Hatalar için issue açmaktan veya feature isteği göndermekten çekinmeyin. Tüm katkıları mümkün olan en kısa sürede gözden geçireceğiz ve değişikliklerinizi birleştirmeye yardımcı olacağız.

Lütfen Yol Haritamızı kontrol edin ve bizimle iletişime geçmekten çekinmeyin!

:memo: Lisans

Bu proje MIT Lisansı altında lisanslanmıştır ‒ ayrıntılar için LICENSE dosyasına bakın.

:speech_balloon: Yardım Alma

Sorularınız veya geri bildiriminiz varsa veya bakımcılar veya diğer topluluk üyeleriyle sohbet etmek istiyorsanız, lütfen aşağıdaki bağlantıları kullanın:

Osnabrück'te ❤️ ile yapılmıştır

Benzer MCP sunucuları

Daha fazla: Communication →