Manus MCP
Manus MCP
공식 Manus API v2를 통해 Claude Code가 Manus.im을 완전히 프로그래밍 방식으로 제어할 수 있도록 하는 MCP 서버입니다. 문서화된 30개의 모든 엔드포인트, 일반적인 워크플로우를 위한 3개의 복합 도구, 그리고 RSA-SHA256 서명 검증을 포함한 로컬 웹훅 수신기를 구현합니다.
상태: 프로덕션 준비 완료 (단일 사용자) — v0.1.1
언어: Python 3.11+
전송: stdio (Claude Code 기본)
기본 URL:
https://api.manus.ai
검증된 커버리지 (v0.1.1)
계층 | 지표 |
단위 테스트 | 60개 이상 (server.py 디스패치, 웹훅 ASGI 앱, 비밀 키 유출 방지, 스키마 안정성) |
라이브 e2e 테스트 | 23개 (task.update / sendMessage / confirmAction / agent.update / website.publish 포함) |
복합 라이브 | 4개 (F2 거부 확인 포함) |
웹훅 라이브 e2e | 1개 (cloudflared 터널 + 수신기 + Manus 전달) |
라이브로 실행된 Manus API 엔드포인트 | 30/30 (계정에 필수 조건이 없는 경우에만 정상적으로 건너뜀 — 에이전트 없음 / 웹사이트 없음) |
커버리지 | ≥ 80% (CI에서 제한) |
| 0 오류 |
| 0 오류 |
프로덕션 흐름은 docs/SECURITY.md 및 docs/RELEASE.md를 참조하세요.
포함된 기능
30개의 직접 API 래퍼
카테고리 | 도구 |
작업 (9) |
|
프로젝트 (2) |
|
기술 (1) |
|
에이전트 (3) |
|
파일 (3) |
|
웹훅 (4) |
|
사용량 (3) |
|
커넥터 (1) |
|
브라우저 (1) |
|
웹사이트 (3) |
|
3개의 복합 도구
manus_file_upload— 사전 서명된 URL을 생성하고, 바이트를 업로드한 후status=uploaded가 될 때까지 기다립니다.path,base64또는 공개url을 허용합니다.manus_task_wait— 작업이 종료 상태(stopped/waiting/error)에 도달할 때까지 폴링하고, 새로운 메시지와 대기 세부 정보(event_id + 응답 스키마)를 반환합니다.manus_website_publish_and_wait— 사이트를 게시하고published또는failed상태가 될 때까지 기다립니다.
3개의 웹훅 도구 (로컬 SQLite DB에서 읽기)
manus_webhook_events_list— 필터를 사용하여 수신된 이벤트를 나열합니다.manus_webhook_events_get—event_id로 이벤트를 가져옵니다.manus_webhook_events_clear— 수신된 이벤트를 삭제합니다.
총: 36개의 MCP 도구.
설치
cd path/to/Manus-MCP
python -m venv .venv
# Windows:
.venv\Scripts\activate
# macOS/Linux:
# source .venv/bin/activate
pip install -e ".[dev]"API 키 구성
프로젝트 루트에 .env 파일을 배치합니다 (제공된 .env.example 템플릿 참조). 두 변수 이름 모두 허용됩니다:
MANUS_API_KEY=sk-...
# or, for backwards compatibility:
# ManusAPI=sk-...우선순위: process.env > .env.
선택적 설정:
MANUS_BASE_URL=https://api.manus.ai
MANUS_HTTP_TIMEOUT=60
MANUS_LOG_LEVEL=INFOClaude Code에 등록
.claude/settings.json (프로젝트 수준) 또는 ~/.claude/settings.json (전역)에 다음을 추가합니다:
{
"mcpServers": {
"manus": {
"command": "python",
"args": ["-m", "manus_mcp"],
"cwd": "path/to/Manus-MCP"
}
}
}MANUS_API_KEY가 전역적으로 설정되지 않은 경우 명시적으로 전달하세요:
{
"mcpServers": {
"manus": {
"command": "python",
"args": ["-m", "manus_mcp"],
"cwd": "path/to/Manus-MCP",
"env": { "MANUS_API_KEY": "sk-..." }
}
}
}Claude Code를 다시 시작하면 도구 목록에 manus_* 도구가 나타납니다.
검증
서버를 실행하지 않고:
python scripts/list_tools.py실제 API에 대해:
python scripts/smoke.py단위 테스트:
pytest린트 및 타입 검사:
ruff check .
mypy manus_mcpClaude Code 사용 예시
manus_task_create { "message": { "content": "Give me a 5-bullet summary of today's AI news" } }응답에는 task_id가 포함됩니다. 그런 다음:
manus_task_wait { "task_id": "<id>", "timeout_sec": 600 }작업이 완료되면 최종 응답이 포함된 last_assistant_message와 대화 기록이 포함된 new_messages를 받게 됩니다.
파일을 업로드하고 작업에 첨부하기:
manus_file_upload { "source": { "path": "C:/docs/report.pdf" } }
manus_task_create {
"message": {
"content": [
{ "type": "text", "text": "Summarize this report" },
{ "type": "file", "file_id": "<file_id>" }
]
}
}웹훅 수신기 (선택 사항)
ManusAPIDocs/webhooks/security.md에 따른 전체 RSA-SHA256 서명 검증을 포함하는 task_created / task_stopped 이벤트용 로컬 수신기입니다.
1. 환경 변수 구성
MANUS_WEBHOOK_PUBLIC_URL=https://your-tunnel.example.com/manus/webhook
MANUS_WEBHOOK_HOST=127.0.0.1
MANUS_WEBHOOK_PORT=8787
# MANUS_WEBHOOK_DB_PATH=... # defaults to %LOCALAPPDATA%\manus-mcp\events.db on WindowsMANUS_WEBHOOK_PUBLIC_URL은 Manus가 호출하는 URL과 정확히 일치해야 합니다. Manus 서명 페이로드에는 이 URL이 포함되어 있으므로, 오타가 있으면 모든 이벤트가 거부됩니다.
2. 터널 시작
예를 들어, Cloudflare Tunnel을 사용하는 경우:
cloudflared tunnel --url http://localhost:8787또는 ngrok:
ngrok http 87873. 수신기 실행
python -m manus_mcp.webhook_receiver
# or: manus-mcp-webhook --host 127.0.0.1 --port 87874. Manus에 웹훅 등록
Claude Code에서:
manus_webhook_create { "url": "https://your-tunnel.example.com/manus/webhook" }5. 이벤트 읽기
manus_webhook_events_list { "event_type": "task_stopped", "limit": 20 }
manus_webhook_events_get { "event_id": "..." }
manus_webhook_events_clear { "before_received_at": 1704000000 }아키텍처
manus_mcp/
├── __main__.py # stdio entrypoint
├── server.py # MCP Server bootstrap
├── config.py # pydantic-settings
├── logger.py # stderr-only logger
├── client/
│ ├── manus_client.py # async httpx client + retry
│ ├── rate_limiter.py # per-endpoint token bucket (from rate-limits.md)
│ ├── retry.py # exponential backoff + jitter
│ └── errors.py # ManusApiError / ManusNetworkError
├── schemas/ # pydantic models for each resource (tasks, projects, ...)
├── tools/ # @manus_tool registration for all 36 tools
│ ├── tasks.py projects.py skills.py agents.py
│ ├── files.py webhooks.py usage.py connectors.py
│ ├── browser.py website.py
│ └── composite.py # task_wait / file_upload / website_publish_and_wait
└── webhook_receiver/
├── signature.py # RSA-SHA256 verification using {ts}.{url}.{sha256_hex(body)}
├── storage.py # SQLite WAL
├── server.py # Starlette + uvicorn
├── tools.py # events_list / events_get / events_clear
└── __main__.py속도 제한
클라이언트는 API 제한(60초 슬라이딩 윈도우)을 준수하며, 429 응답을 받으면 백오프 + 지터(jitter)를 사용하여 투명하게 재시도합니다. 제한 사항은 ManusAPIDocs/getting-started/rate-limits.md에서 가져옵니다:
10/분:
task.create,task.sendMessage40/분: 모든 변경 작업
100/분: 모든 읽기 전용 호출
600/분:
usage.*
보안
API 키는 절대 로그에 기록되지 않습니다.
웹훅 수신기는 서명을 검증하고 5분이 지난 타임스탬프는 거부합니다.
공개 키는 1시간 동안 캐시됩니다.
SQLite는 안전한 다중 읽기 액세스를 위해
check_same_thread=False와 함께 WAL 모드로 열립니다.
라이선스
MIT.
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/aruxojuyu665/Manus-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server