DutyHub MCP Server
https://dutyhub.net
# DutyHub MCP Server
Claude'un (Claude Desktop / Claude Code) **DutyHub** üzerinde otomatik olarak
proje açmasını, task eklemesini, task'ları **Yapılacak → Devam Ediyor → Tamamlandı**
arasında taşımasını, sprint yönetmesini ve yorum bırakmasını sağlayan MCP server'ı.
DutyHub backend'i (ASP.NET Core / .NET 8, PostgreSQL) REST + JSON API'si üzerinden çalışır.
---
## Kurulum
```bash
cd dutyhub-mcp
npm install
npm run build
```
## Yapılandırma (env değişkenleri)
Server, bir **servis hesabı** ile email/şifre kullanarak login olur ve 7 günlük JWT alır.
Token süresi dolunca otomatik yeniden login eder. DutyHub'da ayrı API-key sistemi yoktur.
| Değişken | Zorunlu | Varsayılan | Açıklama |
|---|---|---|---|
| `DUTYHUB_EMAIL` | ✅ | — | Servis hesabı email (örn. `mcp-bot@dutyhub.net`) |
| `DUTYHUB_PASSWORD` | ✅ | — | Servis hesabı şifresi |
| `DUTYHUB_BASE_URL` | — | `https://api.dutyhub.net/api` | API kök adresi |
| `DUTYHUB_DEVICE_ID` | — | `mcp-server-1` | Cihaz kimliği |
| `DUTYHUB_DEVICE_INFO` | — | `Claude MCP` | Cihaz açıklaması |
> ⚠️ Şifreyi koda yazmayın, sohbete yapıştırmayın. Sadece aşağıdaki config'in `env` bloğunda tutun.
## Claude Desktop'a ekleme
`claude_desktop_config.json` dosyasına (macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`):
```json
{
"mcpServers": {
"dutyhub": {
"command": "node",
"args": ["/TAM/YOL/dutyhub-mcp/dist/index.js"],
"env": {
"DUTYHUB_EMAIL": "mcp-bot@dutyhub.net",
"DUTYHUB_PASSWORD": "buraya-sifre"
}
}
}
}
```
Claude Desktop'ı yeniden başlatın. Araçlar otomatik görünür.
## Claude Code'a ekleme
```bash
claude mcp add dutyhub \
--env DUTYHUB_EMAIL=mcp-bot@dutyhub.net \
--env DUTYHUB_PASSWORD=buraya-sifre \
-- node /TAM/YOL/dutyhub-mcp/dist/index.js
```
---
## Araçlar (Tools)
**Projeler**
- `list_projects` — erişilebilir projeleri listele
- `get_project` — proje detayı
- `create_project` — yeni proje (New Project)
**Sprintler**
- `list_sprints` — projenin sprintleri
- `create_sprint` — yeni sprint
- `start_sprint` — başlat (→ active)
- `complete_sprint` — tamamla (→ completed)
**Task'lar**
- `list_tasks` — projenin task'ları (board sayımıyla birlikte; opsiyonel status filtresi)
- `create_task` — yeni task (New Task)
- `update_task_status` — **Yapılacak → Devam Ediyor → Tamamlandı** + opsiyonel yorum
- `update_task` — başlık/açıklama/öncelik/sprint/son tarih güncelle
- `delete_task` — sil
**Yorumlar**
- `add_comment` — task'a yorum bırak
- `list_comments` — task'ın yorumları
**Üyeler / Atama**
- `list_project_members` — proje üyeleri
- `assign_task` — task'a kullanıcı ata
---
## Örnek kullanım (Claude'a söyleyebilecekleriniz)
- "DutyHub'da projelerimi listele."
- "StormCorsairs projesine 'Ana menü müziği ekle' diye orta öncelikli bir task aç."
- "Şu task'ı devam ediyor'a al."
- "vfx setup task'ını tamamlandı yap ve 'Duman efektleri eklendi, test edildi' diye yorum bırak."
- "Apex Empire için 'Sprint 2' adında yeni bir sprint oluştur ve başlat."
---
## Önemli teknik notlar
1. **Status/priority normalizasyonu (kritik):** DutyHub'da bu alanlar serbest metindir ve
istemciler farklı değerler yazmıştır (`pending`/`todo`, `completed`/`done`, `Active`/`in_progress` vb.).
Bu server **yazarken** ana uygulamanın kanonik değerlerini (`pending`/`in_progress`/`completed`,
öncelik `low`/`medium`/`high`/`urgent`) gönderir; **okurken** tüm varyantları tek forma indirir.
Türkçe girdiler (Yapılacak/Devam Ediyor/Tamamlandı, Düşük/Orta/Yüksek/Acil) de kabul edilir.
2. **Task güncelleme tam nesne ister:** `update_task_status` ve `update_task` önce task'ı GET eder,
alanı değiştirip tüm nesneyi PUT eder. `title` boş olamaz (backend 400 döner). Tamamlandı'ya
alırken `completed_at` otomatik set edilir.
3. **Status filtresi server'da yok:** `list_tasks` projeye göre çekip filtrelemeyi istemcide yapar.
4. **Tarihler ISO 8601 UTC:** `2026-06-20` gibi yalın tarihler otomatik `T00:00:00Z`'ye çevrilir.
5. **Tek ortam production'dır.** Denemeleri önce bir "Test" projesinde ve ayrı bir servis hesabıyla yapın.
---
TDQS
Scored across 16 tools
Each tool targets a distinct action on a specific entity (project, sprint, task, comment) with clear boundaries. For example, update_task and update_task_status are separate because they modify different aspects. No overlapping purposes.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., create_project, list_tasks, start_sprint). Verbs are imperative and nouns are plural for lists, singular for single items.
16 tools cover the core operations for project, sprint, task, and comment management. The count is well-scoped for a domain-specific server, not excessive or insufficient.
Tasks have full CRUD (create, update, delete, list) plus status updates, but projects and sprints lack update and delete tools. Comments only have add and list, no delete. These gaps are notable but not severe.