meeting-automation-mcp
νμ μλν: Fireflies νμλ‘μ Asana νμ€ν¬μ Notion λ¬Έμλ‘ μλ λ³ν. νμ μμ½, μ‘μ μμ΄ν , μ°Έμμ μΆμ ν΅ν©.
Ask AI about meeting-automation-mcp
Powered by Claude Β· Grounded in docs
I know everything about meeting-automation-mcp. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
Meeting Automation MCP Server
νμ λ Ήμ/ν μ€νΈ β STT μ μ¬ β Asana νμ€ν¬ β Notion νμλ‘κΉμ§ μλ μ²λ¦¬νλ λ²μ© MCP μλ².
Claude, GPT, Gemini λ± μ΄λ€ LLM ν΄λΌμ΄μΈνΈμμλ μ¬μ©ν μ μμ΅λλ€.
μ¬μ©μ: "νμ μλνν΄μ€"
β
1. VITO API β μ μ¬ (λλ ν
μ€νΈ μ§μ μ
λ ₯)
2. LLM β μμ½ + μ‘μ
μμ΄ν
μΆμΆ
3. Asana API β νμ€ν¬ μμ±
4. Notion API β νμλ‘ μ μ₯
β
LLM: "μλ£! νμ€ν¬ Nκ°, Notion μ μ₯λ¨"
μ€μΉ
git clone https://github.com/Ramhori/meeting-automation-mcp.git
cd meeting-automation-mcp
pip install -r requirements.txt
νκ²½λ³μ μ€μ
.env.exampleμ 볡μ¬νμ¬ .env νμΌμ λ§λ€κ³ μ€μ κ°μ μ
λ ₯ν©λλ€.
cp .env.example .env
| λ³μ | νμ | μ€λͺ |
|---|---|---|
VITO_CLIENT_ID | μ ν | VITO STT API ν΄λΌμ΄μΈνΈ ID (μμΌλ©΄ ν μ€νΈ μ λ ₯λ§ κ°λ₯) |
VITO_CLIENT_SECRET | μ ν | VITO STT API μν¬λ¦Ώ |
ASANA_TOKEN | νμ | Asana Personal Access Token |
NOTION_TOKEN | νμ | Notion Internal Integration Token |
NOTION_DATABASE_ID | νμ | νμλ‘ μ μ₯ν Notion λ°μ΄ν°λ² μ΄μ€ ID |
DEFAULT_AUTHOR | μ ν | κΈ°λ³Έ μμ±μ μ΄λ¦ |
LOG_LEVEL | μ ν | λ‘κ·Έ λ 벨 (κΈ°λ³Έ: INFO) |
MCP ν΄λΌμ΄μΈνΈ μ°λ
Claude Desktop
claude_desktop_config.jsonμ μΆκ°:
{
"mcpServers": {
"meeting-automation": {
"command": "python",
"args": ["C:\\κ²½λ‘\\meeting-automation-mcp\\server.py"]
}
}
}
Claude Code
~/.claude/settings.json λλ νλ‘μ νΈμ .mcp.jsonμ μΆκ°:
{
"mcpServers": {
"meeting-automation": {
"command": "python",
"args": ["C:\\κ²½λ‘\\meeting-automation-mcp\\server.py"]
}
}
}
Cursor
Settings β MCP Serversμμ λμΌν command/argsλ‘ μΆκ°.
λꡬ λͺ©λ‘ (11κ°)
Setup
| λꡬ | μ€λͺ |
|---|---|
check_meeting_setup | VITO/Asana/Notion μ°κ²° μν νμΈ. μ²μ μ¬μ© μ νΈμΆ |
STT (μ μ¬)
| λꡬ | μ€λͺ |
|---|---|
process_meeting | μ€λμ€ νμΌ(VITO) λλ ν μ€νΈ μ λ ₯ μ²λ¦¬. μ°μ μμ: text > text_file_path > audio_path |
Asana (νμ€ν¬ CRUD)
| λꡬ | μ€λͺ |
|---|---|
create_meeting_task | μ‘μ μμ΄ν β Asana νμ€ν¬ μμ± |
update_meeting_task | κΈ°μ‘΄ νμ€ν¬ μμ (μ΄λ¦, λ΄λΉμ, κΈ°ν λ±) |
get_meeting_tasks | νλ‘μ νΈ λ΄ νμ€ν¬ λͺ©λ‘ μ‘°ν |
delete_meeting_task | νμ€ν¬ μμ |
Notion (νμλ‘ CRUD)
| λꡬ | μ€λͺ |
|---|---|
save_meeting_notes | νμλ‘ β Notion DB μ μ₯ (13κ° μμ± μλ λ§€ν) |
update_meeting_notes | κΈ°μ‘΄ νμλ‘ μμ |
get_meeting_notes | νμλ‘ λͺ©λ‘ μ‘°ν |
delete_meeting_notes | νμλ‘ μμΉ΄μ΄λΈ(μμ ) |
Pipeline (μμ·)
| λꡬ | μ€λͺ |
|---|---|
run_full_pipeline | μ μ¬ β Asana β Notion μΌκ΄ μ²λ¦¬ (νμΈ μμ΄ νλ²μ) |
λμ λͺ¨λ
| λͺ¨λ | μ¬μ© λ°©μ | λμ |
|---|---|---|
| λ¨κ³λ³ | LLMμ΄ λꡬλ₯Ό κ°λ³ νΈμΆ, μ€κ°μ μ¬μ©μ νμΈ | Claude, GPT-4 λ± |
| μμ· | run_full_pipeline νλλ‘ μΌκ΄ μ²λ¦¬ | μλν μ€ν¬λ¦½νΈ |
μ¬μ© μμ
ν μ€νΈλ‘ νμλ‘ μ²λ¦¬ (λ¨κ³λ³)
1. process_meeting(text="νμ λ΄μ©...") β μ μ¬ ν
μ€νΈ λ°ν
2. LLMμ΄ μμ½ + μ‘μ
μμ΄ν
μΆμΆ β μ¬μ©μμκ² λ³΄μ¬μ€
3. μ¬μ©μ OK β create_meeting_task Γ Nν
4. μ¬μ©μ OK β save_meeting_notes
μ€λμ€ νμΌ μ μ¬ (VITO ν€ νμ)
1. check_meeting_setup() β μ°κ²° μν νμΈ
2. process_meeting(audio_path="νμλ
Ήμ.m4a") β μ μ¬
3. μ΄ν λμΌ
μμ· νμ΄νλΌμΈ
run_full_pipeline(
text="νμ λ΄μ©...",
project_id="12345",
action_items_json='[{"name":"API κ°λ°","assignee":"kim@co.kr","due_on":"2026-03-20"}]',
meeting_title="3μ μ κΈ°νμ",
meeting_date="2026-03-17"
)
Notion DB μμ± λ§€ν
| DB μμ± | νμ | λꡬ νλΌλ―Έν° |
|---|---|---|
| νμλͺ | title | title |
| νμμΌμ | date | date_str |
| νμμ₯μ | text | location |
| μ£Όκ΄λΆμ | text | host_dept |
| μ°ΈμλΆμ | text | attend_dept |
| μ°Έμμ | text | attendees |
| νμμ건 | text | agenda |
| νμλ΄μ© | text | summary |
| κ²°μ μ¬ν | text | decisions |
| κΈ°ν | text | etc |
| μμ±μΌ | date | μλ (μ€λ λ μ§) |
| μμ±μ | text | author (κΈ°λ³Έ: DEFAULT_AUTHOR) |
| URL | url | url |
μλ¬ μ½λ
| μ½λ | μ€λͺ | λμ |
|---|---|---|
VITO_NOT_CONFIGURED | VITO API ν€ λ―Έμ€μ | .envμ ν€ μΆκ° λλ ν μ€νΈ μ λ ₯ μ¬μ© |
AUTH_EXPIRED | API μΈμ¦ ν ν° λ§λ£ | .envμμ ν ν° κ°±μ |
AUTH_FAILED | μΈμ¦ μ€ν¨ | API ν€ νμΈ |
FILE_NOT_FOUND | νμΌ μμ | νμΌ κ²½λ‘ νμΈ |
UNSUPPORTED_FORMAT | λ―Έμ§μ μ€λμ€ ν¬λ§· | wav, mp3, m4a, flac, aacλ§ μ§μ |
FILE_TOO_LARGE | νμΌ 1GB μ΄κ³Ό | νμΌ λΆν |
STT_TIMEOUT | μ μ¬ 10λΆ μ΄κ³Ό | μ¬μλ λλ μ§§μ νμΌ μ¬μ© |
RATE_LIMIT | API μμ² μ ν μ΄κ³Ό | μλ μ¬μλ (μλ² μ²λ¦¬) |
PERMISSION_DENIED | μ κ·Ό κΆν μμ | Notion Integration μ€μ νμΈ |
NO_DATABASE_ID | DB ID λ―Έμ€μ | .envμ NOTION_DATABASE_ID μΆκ° |
NO_INPUT | μ λ ₯κ° μμ | text, text_file_path, audio_path μ€ νλ μ 곡 |
νλ‘μ νΈ κ΅¬μ‘°
meeting-automation-mcp/
βββ server.py β FastMCP μνΈλ¦¬ν¬μΈνΈ (λꡬ λ±λ‘ + lifespan)
βββ config.py β μ€μ κ΄λ¦¬ (.env κΈ°λ°)
βββ models.py β κ³΅ν΅ νμ
(ServiceResult, TranscriptResult)
βββ utils.py β 곡μ μ νΈλ¦¬ν° (with_retry)
βββ services/
β βββ vito.py β VITO STT API (μ μ¬ + JWT ν ν° κ΄λ¦¬)
β βββ asana.py β Asana REST API (νμ€ν¬ CRUD)
β βββ notion.py β Notion API (νμλ‘ CRUD)
βββ .env.example β νκ²½λ³μ ν
νλ¦Ώ
βββ requirements.txt
βββ README.md
λΌμ΄μΌμ€
MIT License
μ μμ
OKκΈμ΅κ·Έλ£Ή ITκΈ°νν κΉμ νΈ
