MCP로 Cursor를 프로젝트 트래커에 연결하기: 티켓을 읽고, 구현하고, 댓글로 돌려주기
.cursor/mcp.json에 원격 MCP 서버를 추가하고 OAuth로 로그인해, 에이전트가 구현 중인 이슈를 읽고 댓글을 남기게 하는 방법. Atrix, Linear, Jira 엔드포인트 포함.
목차
Cursor를 프로젝트 트래커에 연결하려면 트래커의 원격 MCP 서버를 .cursor/mcp.json에 url 항목 하나로 추가하고, Cursor가 OAuth용 브라우저를 열도록 두면 됩니다. 그때부터 에이전트는 구현 중인 이슈를 읽고, 인수 기준을 컨텍스트로 가져오고, 작업이 끝나면 댓글을 남기거나 상태를 바꿀 수 있습니다. API 키를 어디에도 붙여 넣지 않으며, Cursor가 저장하는 토큰은 범위가 제한되고 폐기할 수 있습니다.
이것이 트래커가 우리 자체 워크스페이스인 Atrix에서 우리가 실제로 쓰는 방식입니다. 같은 단계가 Linear와 Jira에도 적용되며, 엔드포인트는 아래에 있습니다. 설정 세부 사항은 2026년 10월 Cursor 문서에서 확인했습니다.
연결이 실제로 주는 것
MCP가 없을 때의 루프는 이렇습니다. 브라우저 탭에서 티켓을 열고, 설명을 채팅에 복사하고, 구현하고, 돌아가서 티켓을 손으로 갱신합니다. 복사 단계에서 댓글, 연결된 요구사항, 라벨이 사라지고, 갱신 단계는 피곤하면 건너뛰게 됩니다.
원격 MCP 서버를 연결하면 Cursor 에이전트에 "이슈 가져오기", "이슈 목록", "이슈에 댓글", "상태 설정" 같은 도구가 생깁니다. "ATR-212 구현해"라고 쓰면 에이전트가 이슈를 가져와 인수 기준과 스레드를 읽고, 작업을 한 뒤, 무엇을 어떤 파일에서 바꿨는지 댓글로 마무리합니다. 티켓은 여전히 단일 진실 공급원이고, 에이전트는 바꿔 말한 글이 아니라 원문을 읽습니다.
연결이 주지 않는 것은 판단력입니다. 에이전트는 잘못 쓰인 티켓을 기꺼이 잘못 구현합니다. 연결은 복사를 없애는 것이지 생각을 없애는 것이 아닙니다.
1단계: 서버와 URL 고르기
각 트래커는 원격 MCP 엔드포인트를 공개합니다. 2026년 10월 기준:
| 트래커 | 원격 MCP URL | 인증 | 읽기 전용 옵션 |
|---|---|---|---|
| Atrix AI | https://atrix.dev/api/mcp | OAuth 2.1, 범위 지정 토큰 | *.read 범위만 부여 |
| Linear | https://mcp.linear.app/mcp | 동적 클라이언트 등록이 있는 OAuth 2.1, API 키도 허용 | https://mcp.linear.app/mcp/readonly |
| Jira(Atlassian Rovo MCP) | https://mcp.atlassian.com/v2/mcp | OAuth 2.1, API 토큰은 선택 | 별도 엔드포인트 없음 |
셋 다 Streamable HTTP를 쓰며 Cursor는 이를 기본 지원합니다. Linear 문서는 예전 SSE 엔드포인트를 폐기 예정 대체 수단으로 표기합니다. 트래커가 로컬(stdio) 서버만 제공한다면 Cursor도 실행할 수 있지만, OAuth 흐름을 잃고 환경 변수에서 API 키를 관리하게 됩니다.
2단계: .cursor/mcp.json에 추가하기
Cursor는 두 파일을 읽습니다. 프로젝트 전용 서버는 프로젝트 루트의 .cursor/mcp.json, 어디서나 쓰는 서버는 ~/.cursor/mcp.json입니다. 저장소가 제품 하나에 대응하면 프로젝트 파일에, 여러 제품을 오가며 일하면 전역 파일에 둡니다.
원격 항목은 mcpServers 아래의 url입니다. headers는 선택이며 정적 토큰에만 필요합니다.
{
"mcpServers": {
"atrix": {
"url": "https://atrix.dev/api/mcp"
}
}
}
Linear는 이름과 URL을 https://mcp.linear.app/mcp로, Jira는 https://mcp.atlassian.com/v2/mcp로 바꿉니다. Cursor 문서는 모든 원격 서버에 같은 형태를 보여 주며, 헤더가 필요해지면 url과 headers 안에서 ${env:NAME} 보간을 지원합니다.
파일을 저장합니다. Cursor는 재시작 없이 이를 읽어 사이드바의 Customize에 서버를 표시하고, 토글로 켜고 끌 수 있습니다. 꺼진 서버는 로드되지 않고 그 도구는 채팅에 나타나지 않습니다.
3단계: 붙여 넣은 키가 아니라 OAuth로 인증하기
에이전트가 처음 도구를 호출하면 서버는 인가 서버를 가리키는 401을 돌려주고, Cursor는 자신을 공개 클라이언트로 등록(동적 클라이언트 등록)한 뒤 브라우저를 엽니다. 로그인하고, 요청되는 범위를 보고, 승인하면 토큰이 Cursor에 저장됩니다. Cursor는 PKCE가 있는 인가 코드 흐름을 쓰며, 리다이렉트 URL 두 개는 고정입니다. 웹과 Cloud Agents용 https://www.cursor.com/agents/mcp/oauth/callback, 데스크톱 앱용 http://localhost:8787/callback입니다.
이것이 headers의 키보다 나은 이유: 토큰은 승인한 범위로 제한되고, 스스로 갱신되며, 트래커에서 폐기하면 Cursor의 접근이 즉시 끊깁니다. JSON 파일 속 개인 액세스 토큰은 그 프로젝트의 모든 에이전트가 읽을 수 있는, 디스크에 놓인 장기 비밀입니다. 헤더 방식은 브라우저가 없는 CI를 위해 남겨 두세요.
서버가 동적 등록을 지원하지 않으면, Cursor는 원격 항목에 CLIENT_ID, 선택적 CLIENT_SECRET, scopes가 있는 auth 객체도 받습니다.
4단계: 에이전트가 이슈를 읽고 댓글을 남기게 하기
읽기 도구를 먼저 승인하고, 쓰기는 한 번에 하나씩 승인하세요. Cursor는 기본적으로 MCP 도구를 쓰기 전에 승인을 요청합니다. 터미널 명령을 다루는 Run Modes가 MCP 도구에도 적용되므로, auto-review 모드에서는 허용 목록의 도구는 즉시 실행되고 나머지는 분류기를 거칩니다.
잘 작동하는 프롬프트:
ATR-212를 구현해. 먼저 이슈와 댓글을 읽고, 인수 기준을 따르고,
끝나면 바꾼 파일과 하지 못한 것을 이슈에 댓글로 남겨.
에이전트는 work_get_issue(Linear는 get_issue, Atlassian은 getJiraIssue)를 호출하고, 구현한 뒤, 댓글 도구를 호출합니다. 우리는 상태를 스스로 바꾸게 두지 않습니다. 댓글은 되돌릴 수 있는 잡음이지만, 반쯤 끝난 일에 붙은 "완료"는 트래커 속 거짓말입니다. 상태 변경은 사람이 하거나, 최소한 호출별 승인 뒤에 둡니다.
도움이 되는 습관 두 가지:
- 브랜치 이름에 이슈 키를 넣는다.
atr-212-booking-reminders. 에이전트도 당신도 어떤 티켓이 대상인지 알고, 댓글이 제자리에 갑니다. - 채팅 요약이 아니라 댓글을 요청한다. 채팅은 흘러가 버리고, 다음 사람이 보는 곳은 티켓입니다.
Atrix 쪽의 범위, 감사, 제한
Atrix AI의 MCP 서버는 OAuth 2.1 위에서 85개 도구를 노출하며 Official MCP Registry와 Glama에 등재되어 있습니다. Cursor가 연결되면 부여 가능한 49개 범위(2026년 10월 기준) 목록에서 고릅니다. 쓰기 범위는 읽기를 포함하고(work.write는 work.read를 포함), feed.post 같은 이름 있는 범위는 절대 암묵적으로 포함되지 않아 의도적으로 부여해야 합니다. 토큰은 만든 사람보다 많은 일을 할 수 없고, 권한은 호출마다 확인되므로, 누군가의 거래 금액 접근 권한을 빼면 그 사람이 발급한 모든 토큰에서도 빠집니다. 급여 기록은 아예 부여할 수 없습니다.
Cursor 연결에는 먼저 work.read와 projects.read를 부여하고, 댓글 남기기 단계가 가치를 증명한 뒤 work.write를 추가합니다. 모든 호출은 도구, 결과, 대상 종류와 id로 감사되며 내용은 기록되지 않고, 제한은 토큰당 분당 120회 호출과 30회 쓰기입니다. 개발자 문서에 도구와 범위 목록이 있고, Cursor 통합 페이지에 원클릭 추가가 있습니다.
이 작업에서 Atrix가 Linear보다 약한 점: Linear 엔드포인트에는 전용 읽기 전용 URL이 있어 신중한 팀원은 범위 선택 화면을 보지 않고도 연결할 수 있습니다. Atrix에서는 읽기 범위만 부여하면 같은 결과를 얻지만 결정이 하나 더 필요합니다. Jira 서버는 Confluence와 Bitbucket에도 닿으므로 스펙이 거기 있다면 중요합니다.
흔한 실패 해결하기
- 서버를 추가했는데 "도구 없음". Customize의 토글과 JSON 유효성을 확인하세요. 끝에 붙은 쉼표가 파일 전체를 조용히 망가뜨립니다.
- OAuth 루프 또는 "invalid redirect". 공급자가 Cursor의 고정 콜백 URL을 받아들여야 합니다.
localhost리다이렉트를 막는 회사 SSO는 데스크톱 흐름을 깨뜨립니다. - 도구는 실행되는데 403을 돌려준다. 범위 문제입니다. 읽기만 부여했는데 에이전트가 쓰려 했습니다. 쓰기 범위로 재인가하거나 쓰기는 직접 하세요.
- 에이전트가 엉뚱한 이슈를 읽는다. 모호한 프롬프트에서 추측한 것입니다. "예약 버그"가 아니라 키를 주세요.
- 도구가 너무 많아 모델이 혼란스러워한다. 오늘 쓰지 않는 서버는 끄세요. Cursor는 켜진 것만 로드합니다.
자주 묻는 질문
Cursor는 OAuth가 있는 원격 MCP 서버를 지원하나요?
네. 2026년 10월 기준 Cursor 문서는 mcp.json의 url 항목으로 설정하는 원격 서버, PKCE가 있는 인가 코드 흐름의 OAuth, 서버가 지원할 경우 동적 클라이언트 등록을 설명합니다. Cursor는 공개 클라이언트로 등록합니다.
Cursor MCP 설정 파일은 어디에 있나요?
해당 프로젝트용은 프로젝트 루트의 .cursor/mcp.json, 모든 프로젝트용은 홈 디렉터리의 ~/.cursor/mcp.json입니다. 둘 다 직접 정한 이름을 키로 하는 mcpServers 객체를 씁니다.
Cursor가 MCP로 Linear나 Jira 티켓을 읽을 수 있나요?
네. Linear 서버는 https://mcp.linear.app/mcp(읽기 전용은 /mcp/readonly), Jira와 Confluence용 Atlassian Rovo MCP 서버는 https://mcp.atlassian.com/v2/mcp입니다. 둘 다 Cursor를 지원 클라이언트로 문서화하고 OAuth 2.1을 씁니다.
에이전트가 티켓을 닫게 해도 되나요?
우리는 기본적으로 허용하지 않습니다. 댓글은 안전하지만 상태 변경은 사람이나 호출별 승인을 거쳐야 합니다. Cursor는 허용 목록에 넣지 않는 한 MCP 도구 실행 전에 묻습니다.
mcp.json에 API 키를 넣어도 되나요?
브라우저가 없는 CI라면 환경 변수에 두고 ${env:NAME}으로 보간하는 방식으로 괜찮습니다. 노트북에서는 OAuth를 쓰세요. 토큰은 범위가 제한되고 갱신·폐기가 가능하며, 장기 비밀이 파일에 남지 않습니다.
원격 MCP 서버란 무엇인가요?
로컬 프로세스로 시작하는 대신 HTTPS로 접근하는 MCP 서버입니다. OAuth로 인증하고 팀 전체가 공유할 수 있습니다. 정의와 stdio 서버와의 차이는 용어집 항목을 보세요.
다음 단계
오늘 읽기 범위로 서버 하나를 추가하고 "이 이슈를 구현해" 프롬프트를 한 번만 실행해 보세요. 댓글 남기기 단계를 켤 가치가 있는지 한 시간 안에 알게 됩니다. 트래커가 Atrix라면 Cursor 통합 페이지에 붙여 넣을 정확한 항목이 있고, MCP 기능 페이지에 각 범위가 무엇을 여는지 나와 있습니다.