데스크톱 앱을 켜두지 않고 MCP 서버 쓰기

2026-08-29·9분
요약: MCP 클라이언트가 커넥터를 직접 띄웁니다. Claude Desktop 설정에 LocalSynapse 실행 파일 경로와 인자 mcp 를 적어두면, Claude Desktop 이 시작할 때 그것을 자기 프로세스로 띄워 stdio 로 대화하고 종료할 때 함께 끝냅니다. 데스크톱 창은 열 필요가 없고 닫아도 에이전트에 영향이 없습니다. 처음부터 그랬던 것은 아닙니다 — 2.18.0 이전에는 커넥터가 앱 창의 자식이어서, 에이전트를 계속 쓰려면 앱을 통째로 상주시켜야 했고 저희 기기에서 그건 아무 일도 안 하면서 약 1.9 GB 를 붙들고 있는 상태였습니다.

로컬 검색 도구를 AI 클라이언트에 붙여보셨다면 이런 상황을 겪으셨을 수 있습니다. 에이전트는 동작하는데, 데스크톱 창이 뒤에 열려 있는 동안에만 그렇습니다. 창을 닫으면 에이전트가 기억을 잃습니다. 열어두면 보지도 않는 창에 수 기가바이트를 헌납하게 됩니다.

LocalSynapse 도 2.18.0 전까지 그랬습니다. 이 글은 왜 그렇게 되는지, 무엇이 바뀌었는지, 그리고 당신 기기에서 그것을 어떻게 확인하는지에 대한 것입니다.

커넥터가 앱 안에 갇히는 이유

MCP 서버는 보통 stdio — 표준 입출력 — 으로 대화합니다. 클라이언트가 서버를 자식 프로세스로 띄우고 그 파이프로 이야기합니다. 네트워크 포트도, 데몬도, 지켜야 할 수신기도 없습니다. 좋은 설계입니다. 서버의 수명이 그것을 필요로 하는 대화의 수명과 정확히 같으니까요.

함정은 제품에 데스크톱 UI 와 MCP 서버가 둘 다 있고, 서버를 띄우는 가장 쉬운 방법이 이미 돌고 있는 앱 안에서 띄우는 것일 때 생깁니다. 그렇게 하면 바로 동작하고, 아무도 고르지 않은 성질 하나가 조용히 따라붙습니다 — 커넥터가 창의 자식이 된다는 것. 창을 닫으면 자식이 죽고 에이전트는 눈이 멉니다.

그러면 개발자보다 사용자가 먼저 우회법을 발견합니다 — 앱을 최소화해서 영원히 켜두는 것. 대가는 거기서 발생합니다. 저희 기기에서, 의미검색 모델을 올린 채 아무 일도 하지 않는 데스크톱 인스턴스가 작업 집합 약 1.9 GB 를 붙들고 있었습니다. 노트북에서는 그게 메모리만의 문제가 아닙니다 — 아침 이후로 아무도 보지 않은 창을 위해 디스크를 깨우고 전력을 끌어다 쓰는 프로세스입니다.

무엇이 바뀌었나

2.18.0 부터 커넥터는 앱이 아니라 당신의 MCP 클라이언트가 띄웁니다. 클라이언트가 설정을 읽고 LocalSynapse 실행 파일을 mcp 인자와 함께 자기 프로세스로 시작한 뒤 stdio 로 대화합니다. 데스크톱 창은 더 이상 사슬에 없습니다.

구체적으로 프로세스 구조가 이랬던 것이

Claude Desktop
  └─ (없음 — 앱을 열어두는 걸 기억하지 않는 한)

LocalSynapse.exe            ← 데스크톱 창. 계속 열려 있어야 한다
  └─ 커넥터                  ← 창을 닫으면 함께 죽는다

이렇게 됐습니다.

Claude Desktop
  └─ LocalSynapse.exe mcp    ← Claude 가 띄운 자기 프로세스
                                Claude 가 끝나면 함께 끝난다

LocalSynapse.exe            ← 선택. UI 가 필요하면 연다.
                                닫아도 Claude 쪽은 아무 변화 없다

설정

Windows 는 %APPDATA%\Claude\claude_desktop_config.json 에:

{
  "mcpServers": {
    "localsynapse": {
      "command": "C:\\Program Files\\LocalSynapse\\LocalSynapse.exe",
      "args": ["mcp"]
    }
  }
}

macOS 는 ~/Library/Application Support/Claude/claude_desktop_config.json 에:

{
  "mcpServers": {
    "localsynapse": {
      "command": "/Applications/LocalSynapse.app/Contents/MacOS/LocalSynapse",
      "args": ["mcp"]
    }
  }
}

두 가지를 짚어둘 만합니다. 설정이 맞아 보이는데 아무 일도 일어나지 않는 흔한 원인이기 때문입니다. Windows 경로의 역슬래시는 두 번 씁니다 — JSON 에서 역슬래시 하나는 이스케이프 문자입니다. 그리고 Claude Desktop 은 이 파일을 시작할 때만 읽습니다. 트레이까지 포함해 완전히 종료했다가 다시 여십시오. 창을 닫는 것은 종료가 아닙니다.

바라지 말고 확인하기

쓸모가 커지는 순서로 세 가지입니다.

프로세스 목록. 클라이언트가 열려 있고 데스크톱 창은 닫힌 상태에서도 LocalSynapse 프로세스가 보여야 하고, 그 부모가 클라이언트여야 합니다. 이 관찰 하나가 이 글의 주장 전부입니다.

도구 목록. 에이전트에게 어떤 도구를 쓸 수 있는지 물어보십시오. LocalSynapse 는 현재 아홉 개를 노출하며, 에이전트가 그 이름들을 댄다면 핸드셰이크가 끝난 것입니다.

실제 검색. 연결만이 아니라 색인까지 건드리므로 결정적인 확인입니다. 파일을 읽어야 답할 수 있는 것을 물어본 뒤, 어떤 도구를 불렀고 무엇이 돌아왔는지 물어보십시오. 이 마지막 단계가 들리는 것보다 중요합니다 — 당신의 파일을 못 찾은 에이전트도 대개 답은 합니다. 일반 지식으로, 찾아본 것과 구별되지 않는 어조로.

응답에 실제로 담기는 것

2.19.0 부터 검색 결과는 파일 티저 목록이 아닙니다. 문서 아래에 구절이 달린 묶음이고, 여기에 질의를 어떻게 해석했는지가 함께 옵니다. 모양만 남기면 이렇습니다.

{
  "query": "계약서 검토 의견",
  "purpose": "answer",
  "documents": [
    {
      "fileId": "…",
      "path": "…/2026/계약/공급계약_초안_v8.docx",
      "displayName": null,
      "modifiedAt": "2026-07-28",
      "rankingScore": 0.1101,
      "passages": [
        { "at": "chunk 0 chars 0-600", "text": "…" },
        { "at": "chunk 3 chars 0-600", "text": "…" }
      ],
      "noPassageReason": null
    }
  ],
  "request": {
    "asked": "계약서 검토 의견",
    "readAs": {
      "terms": { "used": ["계약서", "검토", "의견"], "dropped": [] },
      "matchExpression": "…",
      "scope": { "kind": "all", "time": "all", "location": "all" },
      "unit": { "purpose": "answer", "purposeDeclared": true }
    },
    "notConstrained": [
      { "axis": "kind", "options": [
          { "value": "document", "count": 11 },
          { "value": "email", "count": 9 } ],
        "howToConstrain": "…" }
    ],
    "conflict": null
  },
  "basis": {
    "mode": "Smart",
    "documentsFound": 20,
    "documentsReturned": 20,
    "ranking": { "howToRead": "…" }
  }
}

짚어둘 대목들입니다.

클라이언트 둘을 동시에

클라이언트마다 프로세스가 뜬다면 둘을 동시에 돌릴 때 어떻게 되느냐는 걱정이 자연스럽습니다. 한쪽엔 Claude Desktop, 다른 쪽엔 또 다른 에이전트, 둘 다 같은 색인을 봅니다.

검색은 영향이 없습니다. 클라이언트마다 자기 커넥터 프로세스를 갖고 각자 의미검색을 포함한 완전한 검색을 씁니다. 색인은 중복되지 않습니다. 떠 있는 프로세스 중 정확히 하나만 색인을 유지하도록 선출되며, 데스크톱 앱이 열려 있으면 그 역할을 맡습니다. 즉 두 번째 클라이언트는 읽는 쪽이지 두 번째 색인기가 아니고, 당신의 파일이 두 번 처리되는 일은 없습니다.

대신 알아두실 비용은 메모리입니다. 의미검색 모델은 그것을 필요로 하는 프로세스마다 올라가므로, 커넥터 둘이 의미검색을 하면 모델도 두 번 올라갑니다. 색인할 것이 없어지는 즉시 모델을 놓는 이유가 여기에도 있습니다.

옛 빌드를 쓰고 계시다면

앱 창을 닫았을 때 여전히 에이전트가 끊긴다면 2.18.0 보다 오래된 빌드이고, 업데이트가 해결책입니다. 짐작하지 말고 확인해 보실 만합니다. 이 실패는 조용하기 때문입니다 — 에이전트는 도구를 잃었다고 알려주지 않습니다. 그냥 일반 지식으로 답하기 시작하고, 그건 당신이 파일과 대조해 보기 전까지는 정확히 답처럼 읽힙니다.

LocalSynapse 무료 체험

파일 내용 검색, 100% 오프라인, 무료

홈으로 이동

관련 글