Skip to content

feat(mcp): Phase 1 — parsec mcp serve + stdio JSON-RPC 2.0 server (Refs #293)#348

Open
erishforG wants to merge 1 commit into
release/1.0from
feat/auto-mcp-serve-phase1
Open

feat(mcp): Phase 1 — parsec mcp serve + stdio JSON-RPC 2.0 server (Refs #293)#348
erishforG wants to merge 1 commit into
release/1.0from
feat/auto-mcp-serve-phase1

Conversation

@erishforG

Copy link
Copy Markdown
Owner

무엇

parsec mcp serve 서브커맨드 + stdio JSON-RPC 2.0 서버 구현 (Phase 2, #293).

Phase 1 (#292) 에서 만든 TOOLS registry와 McpContext skeleton 위에 실제 transport loop를 구축.

#293 의 핵심 deliverable: AI agent (Claude Desktop, Cursor) 가 parsec mcp serve 를 stdio MCP server로 등록하고 JSON-RPC 2.0 으로 호출할 수 있는 기반.

등록 예시 (claude_desktop_config.json):

{"command": "parsec", "args": ["mcp", "serve"]}

변경

파일 변경
src/mcp/server.rs 신규 — stdio JSON-RPC 2.0 루프 + 메서드 핸들러
src/mcp/mod.rs pub mod server 노출 (+1 줄)
src/cli/mod.rs parsec mcp serve 서브커맨드 추가

지원 메서드:

Method 상태 설명
initialize ✅ real 서버 메타데이터 + capabilities 반환
tools/list ✅ real TOOLS registry 전체 반환 (10개)
tools/call 🔧 stub Phase 3에서 실제 핸들러로 교체
shutdown ✅ real null 결과 반환

다음 Phase 힌트

Phase 2 (#293): tools/call stub 을 실제 src/mcp/tools/ 핸들러와 연결. worktree_list 부터 시작 권장 (가장 읽기 전용 + 테스트 용이).

리스크

  • low — 신규 파일 src/mcp/server.rs 만 추가. 기존 CLI 명령 변경 없음.
  • src/cli/mod.rs 는 새 variant + match arm 추가만 (기존 시그니처 불변).
  • spawn_blocking 으로 blocking stdin I/O 를 tokio async context 에서 안전하게 격리.

롤백

parsec mcp serve 서브커맨드 제거 + src/mcp/server.rs 삭제. 기존 명령에 영향 없음.

Test plan

cargo build --quiet        # ✅ pass
cargo fmt --check          # ✅ pass
cargo clippy -- -D warnings # ✅ pass
cargo test --quiet         # ✅ 90+81+7=178 tests pass (7 new in server::tests)

수동 smoke test:

echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' | parsec mcp serve
echo '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' | parsec mcp serve

Refs #293
Milestone: v1.0

@erishforG

#293)

Add `parsec mcp serve` subcommand and the underlying stdio JSON-RPC 2.0
server that makes git-parsec callable by AI agents (Claude Desktop, Cursor).

## What

- `src/mcp/server.rs` — new stdio transport loop:
  - `initialize` → server metadata + protocol version + capabilities
  - `tools/list`  → full TOOLS registry (all 10 tools from Phase 1 spec)
  - `tools/call`  → stub: echoes Phase 3 message for known tools,
                       returns METHOD_NOT_FOUND for unknown tools
  - `shutdown`    → returns null result
  - malformed JSON  → PARSE_ERROR (-32700)
  - unknown method  → METHOD_NOT_FOUND (-32601)
- `src/mcp/mod.rs` — expose `pub mod server`
- `src/cli/mod.rs` — add `parsec mcp` subcommand with `serve` action;
                       wired via `tokio::task::spawn_blocking`

## Tests (7 new unit tests)

initialize, tools/list, tools/call known/unknown, shutdown, unknown method,
missing-method field — all in `src/mcp/server::tests`.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@erishforG erishforG added the auto-improvement Daily auto-generated improvement PR/issue label Jun 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

auto-improvement Daily auto-generated improvement PR/issue

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant