# Work Assistant Agent

LangChain ReAct 패턴 기반의 MCP(Model Context Protocol) 지원 에이전트입니다.
Cursor IDE의 Agent처럼 MCP 서버를 등록하여 다양한 도구를 사용할 수 있습니다.

## 특징

- **LangChain ReAct 에이전트**: LangGraph를 활용한 ReAct(Reasoning and Acting) 패턴 구현
- **MCP 지원**: 여러 MCP 서버를 등록하고 도구로 활용
- **스트리밍**: SSE(Server-Sent Events)를 통한 실시간 응답 스트리밍
- **다중 LLM 지원**: OpenAI, Anthropic 등 다양한 LLM 제공자 지원
- **세션 관리**: 대화 컨텍스트 유지 및 관리

## 설치

### 1. 의존성 설치

```bash
cd work-assistant-agent
pip install -e .
```

### 2. 환경 변수 설정

```bash
cp env.example.txt .env
```

`.env` 파일을 편집하여 API 키와 설정을 입력합니다:

```env
MODEL_PROVIDER=openai
MODEL_NAME=gpt-4o
OPENAI_API_KEY=sk-your-api-key
MCP_CONFIG_PATH=mcp_config.json
```

### 3. MCP 설정

```bash
cp mcp_config.example.json mcp_config.json
```

`mcp_config.json` 파일을 편집하여 사용할 MCP 서버를 설정합니다:

```json
{
  "mcpServers": {
    "work-assistant": {
      "command": "uvx",
      "args": ["work-assistant-mcp"],
      "env": {
        "SUPABASE_URL": "https://your-project.supabase.co",
        "SUPABASE_SERVICE_KEY": "your-service-key",
        "API_BASE_URL": "https://your-api.example.com"
      },
      "enabled": true
    }
  }
}
```

## 사용법

### HTTP 서버 실행

```bash
# 직접 실행
python -m work_assistant_agent.server

# 또는 uvicorn으로 실행
uvicorn work_assistant_agent.server:app --host 0.0.0.0 --port 8000 --reload

# 또는 설치 후 스크립트로 실행
work-assistant-agent
```

### API 엔드포인트

#### 헬스 체크
```bash
curl http://localhost:8000/health
```

#### 도구 목록 조회
```bash
curl http://localhost:8000/tools
```

#### 채팅 (비스트리밍)
```bash
curl -X POST http://localhost:8000/chat \
  -H "Content-Type: application/json" \
  -d '{
    "message": "휴가신청 해줘",
    "tenant_id": "uengine",
    "user_uid": "user-uuid",
    "user_email": "user@example.com"
  }'
```

#### 채팅 (스트리밍)
```bash
curl -X POST http://localhost:8000/chat/stream \
  -H "Content-Type: application/json" \
  -d '{
    "message": "나라장터 검색 결과 알려줘",
    "tenant_id": "uengine",
    "user_uid": "user-uuid",
    "stream": true
  }'
```

#### MCP 서버 추가 (런타임)
```bash
curl -X POST http://localhost:8000/mcp/servers \
  -H "Content-Type: application/json" \
  -d '{
    "name": "github",
    "command": "npx",
    "args": ["-y", "@modelcontextprotocol/server-github"],
    "env": {"GITHUB_PERSONAL_ACCESS_TOKEN": "your-token"}
  }'
```

### Python 코드에서 사용

```python
import asyncio
from work_assistant_agent import WorkAssistantAgent, AgentConfig, AgentContext

async def main():
    # 에이전트 설정
    config = AgentConfig(
        model_provider="openai",
        model_name="gpt-4o",
        mcp_config_path="mcp_config.json"
    )
    
    # 에이전트 생성 및 초기화
    agent = WorkAssistantAgent(config)
    await agent.initialize()
    
    # 컨텍스트 설정
    context = AgentContext(
        tenant_id="uengine",
        user_uid="user-uuid",
        user_email="user@example.com",
        user_name="홍길동"
    )
    
    # 비스트리밍 응답
    response = await agent.run("휴가신청 해줘", context, stream=False)
    print(response)
    
    # 스트리밍 응답
    stream = await agent.run("나라장터 검색해줘", context, stream=True)
    async for chunk in stream:
        print(chunk)
    
    # 정리
    await agent.cleanup()

if __name__ == "__main__":
    asyncio.run(main())
```

### 런타임에 MCP 서버 추가

```python
# 에이전트 초기화 후 추가 MCP 서버 등록
await agent.add_mcp_server(
    name="github",
    command="npx",
    args=["-y", "@modelcontextprotocol/server-github"],
    env={"GITHUB_PERSONAL_ACCESS_TOKEN": "your-token"}
)
```

## MCP 서버 설정 형식

`mcp_config.json` 파일은 Cursor IDE의 MCP 설정과 유사한 형식을 사용합니다:

```json
{
  "mcpServers": {
    "서버이름": {
      "command": "실행명령어",
      "args": ["인자1", "인자2"],
      "env": {
        "환경변수1": "값1"
      },
      "enabled": true
    }
  }
}
```

### 지원되는 MCP 서버 예시

| 서버 | 명령어 | 설명 |
|------|--------|------|
| work-assistant | `uvx work-assistant-mcp` | 업무 프로세스 관리 |
| filesystem | `npx @modelcontextprotocol/server-filesystem` | 파일 시스템 접근 |
| github | `npx @modelcontextprotocol/server-github` | GitHub API |
| brave-search | `npx @modelcontextprotocol/server-brave-search` | 웹 검색 |
| postgres | `npx @modelcontextprotocol/server-postgres` | PostgreSQL DB |

## 아키텍처

```
┌─────────────────────────────────────────────────────────────┐
│                    Work Assistant Agent                      │
├─────────────────────────────────────────────────────────────┤
│  ┌─────────────────┐  ┌─────────────────┐                   │
│  │  FastAPI Server │  │   LangGraph     │                   │
│  │  (HTTP/SSE)     │  │   ReAct Agent   │                   │
│  └────────┬────────┘  └────────┬────────┘                   │
│           │                    │                             │
│           ▼                    ▼                             │
│  ┌─────────────────────────────────────────┐                │
│  │           MCP Client Manager            │                │
│  │  ┌─────────┐ ┌─────────┐ ┌─────────┐   │                │
│  │  │ Server1 │ │ Server2 │ │ Server3 │   │                │
│  │  └─────────┘ └─────────┘ └─────────┘   │                │
│  └─────────────────────────────────────────┘                │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                      MCP Servers                             │
│  ┌───────────────┐ ┌───────────────┐ ┌───────────────┐      │
│  │work-assistant │ │   filesystem  │ │    github     │      │
│  │     MCP       │ │      MCP      │ │      MCP      │      │
│  └───────────────┘ └───────────────┘ └───────────────┘      │
└─────────────────────────────────────────────────────────────┘
```

## 개발

### 테스트 실행

```bash
pip install -e ".[dev]"
pytest
```

### 디버그 모드

```bash
DEBUG=true python -m work_assistant_agent.server
```

## 라이선스

MIT License

