---
title: Codex · Claude Code 연결
description: 토큰을 환경변수로 전달해 로컬 OpenTester MCP를 코딩 에이전트에 연결합니다.
---

# Codex · Claude Code 연결

먼저 [MCP 시작하기](/mcp/)에 따라 패키지를 빌드하고 환경변수 세 개를 준비합니다. 아래 예시의 `/absolute/path/to/opentester`는 실제 소스 저장소 경로로 바꾸세요.

## 원격 HTTP 연결 {#remote-http}

호스팅 주소는 `https://mcp.opentester.app/mcp`이며 Streamable HTTP를 사용합니다. 원격 MCP와 사용자 지정 헤더를 지원하는 클라이언트에 다음 값을 설정합니다.

| 항목 | 값 |
| --- | --- |
| URL | `https://mcp.opentester.app/mcp` |
| Authorization | `Bearer <앱별 에이전트 토큰>` |
| X-OpenTester-App-Id | 개발자 콘솔의 앱 UUID |

토큰은 클라이언트의 비밀 저장 기능이나 환경변수로 전달하세요. URL 쿼리에 넣거나 설정 파일에 평문으로 커밋하지 마세요. MCP OAuth 로그인은 지원하지 않습니다. Google 로그인과 토큰 발급이 운영 서비스에 설정된 이후 실제 도구 호출을 사용할 수 있습니다. `/health` 응답은 MCP 연결 서버의 상태만 나타냅니다.

아래 stdio 방식은 로컬 실행이 필요한 경우에 사용할 수 있습니다.

## Codex

`~/.codex/config.toml`에 서버를 추가합니다. 기존 파일의 다른 설정은 유지합니다.

```toml
[mcp_servers.opentester]
command = "node"
args = ["/absolute/path/to/opentester-mcp/dist/index.js"]
env_vars = ["OPENTESTER_API_URL", "OPENTESTER_APP_ID", "OPENTESTER_AGENT_TOKEN"]
```

`env_vars`는 Codex 실행 환경에 있는 값을 MCP 프로세스에 전달합니다. 세 변수를 설정한 환경에서 Codex를 시작하세요. 데스크톱 앱은 터미널 환경을 자동으로 상속하지 않을 수 있으므로 앱이 시작한 MCP에도 변수가 전달되는지 확인합니다.

설정을 적용한 뒤 연결 상태를 확인합니다.

```sh
codex mcp list
```

대화 중에는 `/mcp`로 서버를 확인할 수 있습니다. Node가 실행 환경의 `PATH`에 없다면 `command`에 Node 실행 파일의 절대 경로를 지정합니다. OpenTester는 stdio 방식이므로 이 설정에서 `codex mcp login`은 사용하지 않습니다.

Codex의 설정 위치와 `env_vars` 동작은 [공식 MCP 문서](https://learn.chatgpt.com/docs/extend/mcp)를 참고하세요.

## Claude Code

작업할 저장소의 `.mcp.json`에 다음 항목을 추가합니다. 파일에 다른 MCP 서버가 있다면 `mcpServers` 아래에 `opentester` 항목을 병합합니다.

```json
{
  "mcpServers": {
    "opentester": {
      "type": "stdio",
      "command": "node",
      "args": ["/absolute/path/to/opentester-mcp/dist/index.js"],
      "env": {
        "OPENTESTER_API_URL": "${OPENTESTER_API_URL}",
        "OPENTESTER_APP_ID": "${OPENTESTER_APP_ID}",
        "OPENTESTER_AGENT_TOKEN": "${OPENTESTER_AGENT_TOKEN}"
      }
    }
  }
}
```

`${…}`는 Claude Code가 실행 환경에서 확장하는 참조입니다. 토큰 원문으로 교체하지 마세요. 변수를 설정한 셸에서 Claude Code를 실행한 뒤, 프로젝트 MCP 설정을 활성화합니다.

```sh
claude mcp list
```

대화 중 `/mcp`에서도 상태를 확인할 수 있습니다. 환경변수나 토큰을 변경한 경우 MCP 서버를 다시 연결합니다. 환경변수 확장과 프로젝트 설정 범위는 [Claude Code 공식 MCP 문서](https://code.claude.com/docs/en/mcp#environment-variable-expansion-in-mcpjson)를 참고하세요.

## 연결 확인

연결이 완료되면 다음 여섯 도구가 제공됩니다.

```text
list_feedback
get_feedback
create_change_request
list_change_requests
get_change_request
attach_pull_request
```

에이전트에게 “OpenTester 피드백을 최대 5개 조회해 줘”라고 요청해 봅니다. 피드백이 없으면 빈 `feedback` 배열과 `total: 0`이 정상 결과입니다. 도구는 보이지만 호출이 실패하면 [오류 해결](/mcp/troubleshooting)에서 토큰 권한과 API 주소를 확인하세요.

## 여러 앱 연결

앱마다 `opentester_android`, `opentester_tablet`처럼 다른 서버 이름을 사용합니다. 각 프로세스에 전달하는 `OPENTESTER_APP_ID`와 `OPENTESTER_AGENT_TOKEN` 값이 해당 앱과 일치해야 합니다.

앱을 바꿀 때 도구 입력에 `appId`를 추가하지 않습니다. 앱 범위는 프로세스 설정에서 정해지며 모든 도구가 그 범위를 공유합니다.

## 실행 명령

호스트는 빌드한 파일을 `node`로 직접 실행하도록 설정합니다. `npm run`의 실행 배너나 임의의 `echo` 출력이 표준 출력에 섞이면 stdio 통신이 깨질 수 있습니다. 서버의 표준 출력은 MCP 메시지 전용이며 시작 오류는 표준 오류로 전달됩니다.
