Excel 파일을 업로드하지 않고 AI 어시스턴트에게 읽히기 (MCP)
AI 어시스턴트에게 스프레드시트에 대해 물을 때 흔한 방법은 업로드하거나 붙여 넣는 것입니다. 둘 다 어느 정도는 됩니다. 업로드는 파일 전체를 서비스로 보냅니다. 붙여 넣기는 표를 탭으로 구분된 텍스트 덩어리로 바꿉니다: 병합된 머리글 셀이 무너지고, 시트 이름이 사라지고, 날짜는 종종 45292 같은 숫자로 도착해 모델이 날짜라고 짐작해야 합니다.
세 번째 방법이 있습니다. Model Context Protocol(MCP)을 쓰면 어시스턴트가 내 PC에서 실행되는 도구를 호출해 통합 문서에서 필요한 부분만 정확히 요청합니다. 이 글은 LocalSynapse의 스프레드시트 도구로 그것이 어떻게 동작하는지, 무엇이 돌아오는지, 그리고 — 분명하게 — 무엇이 비공개로 남고 무엇은 그렇지 않은지를 다룹니다.
붙여 넣은 스프레드시트가 틀어지는 이유
스프레드시트는 값만이 아니라 구조로 의미를 전합니다:
- 좌표. "Q3 시트의 C14 값"은 정확한 참조입니다. 붙여 넣은 블록에서는 사라집니다.
- 병합 셀. B1:E1에 걸친 머리글은 "이 네 열은 한 묶음"이라는 뜻입니다. 붙여 넣으면 값 하나와 빈칸들이 됩니다.
- 타입. Excel은 날짜와 통화를 그냥 숫자로 저장하고 서식으로 보여 줍니다. 서식이 없으면
45292는 그냥 숫자이고, 잘못 짐작한 모델은 자신 있게 틀립니다.
모델은 표를 놓고 추론하는 데는 능숙합니다. 손실된 복사본에서 표를 재구성하는 데는 서툽니다.
MCP로는 어떻게 동작하나
LocalSynapse는 .xlsx 통합 문서를 포함해 PC의 문서를 색인하고, Claude Desktop 같은 어시스턴트가 연결할 수 있는 MCP 서버를 실행합니다. 스프레드시트에 중요한 도구는 셋입니다:
search_files는 문서에 적힌 내용으로 — "협력사 단가 통합 문서" — 문서를 찾아 파일 id를 돌려줍니다.list_indexed_files는 색인된 파일을 폴더와 확장자(예:.xlsx)로 걸러 나열합니다.get_spreadsheet는 파일 id를 받아 통합 문서의 구조를 돌려줍니다. 선택 인자sheetIndex(0부터 시작)로 시트 하나로,cellRange(예:A1:Z100)로 셀 블록 하나로 좁힐 수 있습니다.
전형적인 흐름: "3분기 출장 예산이 얼마였지?"라고 물으면, 어시스턴트가 검색해 예산 통합 문서를 찾고, get_spreadsheet로 해당 시트를 읽은 뒤, 사용한 셀을 근거로 답합니다.
무엇이 돌아오나
응답은 저장된 그대로의 표입니다. 설명용으로 줄인 예시:
{
"fileId": "...",
"schemaVersion": 1,
"sheets": [
{
"index": 0,
"name": "Q3",
"cells": [
{ "coord": "A1", "type": "string", "value": "출장 예산" },
{ "coord": "A3", "type": "string", "value": "월" },
{ "coord": "B3", "type": "string", "value": "금액" },
{ "coord": "A4", "type": "date", "value": "2024-07-01" },
{ "coord": "B4", "type": "number", "value": 1250.5 }
],
"mergedRanges": [ { "start": "A1", "end": "B1" } ],
"truncated": false
}
]
}
눈여겨볼 점:
- 모든 셀에 좌표가 있어서 어시스턴트가 수치를 어디서 가져왔는지 정확히 인용할 수 있고, 여러분이 확인할 수 있습니다.
- 타입은 통합 문서가 선언한 대로입니다. 표준 날짜 서식 셀은 ISO 날짜(시간이 있으면 시간 포함)로 오고, 일부 사용자 지정·로캘 지정 날짜 서식은 일련번호 그대로 옵니다. 1904 날짜 체계를 쓰는 통합 문서(주로 오래된 Mac 파일에 있는 옵션)는 아직 처리하지 못하며, 날짜가 약 4년 어긋나 돌아옵니다. 숫자는 숫자로, 불리언은 불리언으로 오며, Excel 오류는 오류로 표시됩니다.
- 빈 셀은 생략됩니다. 좌표의 빈틈은 그 셀이 비어 있었다는 뜻입니다.
- 수식 셀은 수식이 아니라 Excel이 마지막으로 저장한 값을 돌려줍니다.
- 병합 영역은 따로 나열되므로 여러 열에 걸친 머리글을 알아볼 수 있습니다.
일부러 하지 않는 것
get_spreadsheet는 어느 행이 머리글인지, 열이 무엇을 뜻하는지, 어느 숫자가 "합계"인지 정하지 않습니다. 그것은 판단이고, 그 판단을 잘못 추측하는 도구는 어시스턴트에게 자신만만한 실수를 넘겨줍니다. 도구는 저장된 표를 공급하고, 해석은 어시스턴트가 하며, 여러분은 좌표를 보고 답이 무엇에 근거했는지 확인할 수 있습니다.
알아 둘 한계
- 구조화된 보기는 .xlsx만, 통합 문서당 25MB까지입니다. CSV와 .ods 파일은 검색되고
get_file_content로 텍스트를 읽을 수 있지만 셀 좌표는 없습니다. 구형 .xls는 지원하지 않습니다. - 아주 큰 시트에는 상한이 있습니다. 구조화된 보기는 시트당 비어 있지 않은 셀을 50,000개까지 보관하고, 응답 하나는 최대 50,000개 셀을 돌려줍니다. 상한에 걸리면
truncated가true가 되니 응답당 상한은cellRange로 요청을 좁혀 피할 수 있습니다. 시트당 상한을 넘는 셀은 보관되지 않으므로cellRange로도 읽을 수 없습니다. - 통합 문서가 먼저 색인돼 있어야 합니다. 검색 결과가 비면 어시스턴트가
get_pipeline_status로 색인이 따라잡았는지 확인할 수 있습니다.
무엇이 비공개로 남고, 무엇은 그렇지 않은가
이 부분이 위의 무엇보다 중요하므로 분명히 적습니다.
LocalSynapse 자체는 파일을 업로드하지 않습니다. 색인과 검색은 PC에서 실행되고, MCP 서버도 어시스턴트가 띄우는 PC의 프로세스로 실행됩니다. LocalSynapse는 익명 제품 사용 횟수와 기술 상태 지표만 전송하며, 앱에서 끌 수 있습니다.
하지만 어시스턴트가 읽은 셀은 대화의 일부가 됩니다. Claude Desktop 같은 클라우드 어시스턴트를 쓴다면, 도구가 돌려준 내용은 여러분의 메시지와 함께 어시스턴트 제공사로 전송됩니다 — 직접 붙여 넣었을 때와 같습니다. MCP가 그것을 바꾸지는 않습니다. 바꾸는 것은 나가는 양입니다. 통합 문서 전체 대신, 질문에 필요한 시트와 범위만 가져옵니다. 어시스턴트에게 sheetIndex와 cellRange를 쓰도록 요청하면 그 상태가 유지됩니다.
설정하기
- LocalSynapse를 설치하고 스프레드시트가 있는 폴더를 색인하게 합니다.
- 앱의 MCP 페이지에서 Claude Desktop 등록 버튼을 누릅니다. Claude Desktop 설정 파일(
%APPDATA%\Claude\claude_desktop_config.json)에 LocalSynapse를mcp인자로 실행하는localsynapse항목이 추가됩니다. - 새 서버를 인식하도록 Claude Desktop을 다시 시작합니다.
다른 MCP 클라이언트도 같은 방식입니다: LocalSynapse 실행 파일을 mcp 인자와 함께 지정하세요. 일반적인 설정은 MCP 파일 검색 가이드(영문)에, 실제 차이는 Claude Desktop 단독 vs 로컬 검색을 붙인 Claude Desktop에 정리했습니다.