ExcelMCP
ExcelMCP
AI 에이전트를 위한 실시간 Excel 인텔리전스 레이어. OneDrive 폴더를 가리키면 에이전트가 현재 있는 숫자에 대해 평범한 영어로 스프레드시트에 질문할 수 있습니다.
이 도구가 해결하는 문제
대부분의 스프레드시트 통합은 데이터를 다른 곳에 복사하는 방식으로 작동합니다. 통합 문서를 수집하고, 청크로 나누고, 셀 값을 임베딩한 후, 전체를 벡터 데이터베이스에 저장합니다. 그 순간부터 에이전트는 스냅샷에 대한 질문에 답하게 됩니다. 누군가 오전 9시에 재고 시트를 업데이트해도 에이전트는 화요일 숫자를 인용하고 있습니다.
ExcelMCP는 문제를 두 가지로 나눕니다.
구조는 캐시됩니다. 파일 이름, 시트 이름, 열 머리글, 머리글 행이 시작되는 위치, 어떤 열이 날짜를 보유하는지, 시트가 서로 어떻게 관련되는지 — 또한 낮은 카디널리티 열당 고유 레이블의 작은 샘플도 포함됩니다. 이는 수백 개의 거의 동일한 시트에서 라우팅을 가능하게 하는 요소입니다. 이것은 거의 변경되지 않으며 저장 비용이 저렴하고, 에이전트가 무엇을 요청할지 알기 위해 필요한 정보입니다. (샘플링된 레이블은 구조가 값에 닿는 유일한 지점입니다. 정확한 경계는 디스크에 저장되는 내용에 설명되어 있습니다.)
데이터는 절대 캐시되지 않습니다. 숫자를 반환하는 모든 도구 호출은 Microsoft Graph API로 나가서 실시간으로 가져옵니다. 오래된 데이터 캐시, 뒤처지는 동기화 작업, 디스크에서 제공되는 답변은 없습니다.
모든 응답에는 metadata.fetched_at 타임스탬프와 is_cached: false 플래그가 포함되어 있어 모델이 대역 내에서 최신 데이터를 보고 있음을 알 수 있습니다.
Related MCP server: Microsoft 365 MCP Server
작동 방식
자연어 질문이 임베딩되고, 코사인 유사도로 시트 설명과 매칭된 후, 열 이름 및 샘플링된 값과의 어휘적 중복으로 재순위화됩니다. 이는 20개의 통합 문서가 하나의 스키마를 공유할 때 라우팅을 의미 있게 유지하는 방법입니다. 해당 시트들만 실시간으로 가져옵니다. 그런 다음 필터링과 집계는 새로 가져온 프레임에서 pandas로 이루어집니다. 단일 값 질문은 행 파이프라인을 완전히 건너뜁니다. lookup은 하나의 키 열과 하나의 행을 읽고, 출처와 함께 셀을 반환합니다.
요구 사항
Python 3.10 이상
OneDrive가 있는 Microsoft 365 계정
uv 또는 원한다면 일반 pip
설치
저장소 루트에서:
git clone https://github.com/Karunya-Muddana/ExcelMCP.git
cd ExcelMCP
uv sync # install dependencies
uv build # build the wheel
pip install dist/excelmcp-0.3.0-py3-none-any.whl또는 빌드 없이 소스에서 직접 설치:
pip install .컴파일러 단계나 네이티브 확장 빌드가 없습니다. 벡터 검색은 hnswlib 대신 NumPy 코사인 스캔으로 실행되므로, C++ 툴체인이 없는 머신에서도 pip install이 작동합니다.
설정
마법사를 한 번 실행합니다:
excelmcp-setup네 가지를 안내합니다:
Microsoft 장치 흐름 로그인. 코드를 받아 브라우저에 붙여넣으면 토큰 캐시가
0600권한으로~/.excelmcp/token.json에 저장됩니다.인덱싱할 OneDrive 폴더(예:
/ERP).해당 폴더의 모든
.xlsx파일을 스캔하여 구조 그래프와 임베딩을 구축합니다.머신에 이미 설치된 AI 에이전트를 감지하고 선택한 에이전트에 대한 설정 항목을 작성합니다.
자동으로 설정할 수 있는 에이전트
에이전트 | 설정 파일 |
Claude Code |
|
Claude Desktop |
|
Cursor |
|
Windsurf |
|
Gemini CLI |
|
Codex CLI |
|
VS Code (Copilot) | VS Code 사용자 |
Cline | 확장 |
Continue |
|
Goose |
|
Zed |
|
Hermes |
|
기존 설정 파일은 수정되기 전에 백업됩니다. 에이전트가 목록에 없으면 마법사가 직접 붙여넣을 정확한 JSON 또는 TOML 블록을 출력합니다.
기타 마법사 명령어
excelmcp-setup list-agents # show what was detected
excelmcp-setup install --only cursor # register with one agent, skip the rescan
excelmcp-setup doctor # diagnose a broken install
excelmcp-setup uninstall # remove ExcelMCP from every agent config
excelmcp-setup --folder /ERP --yes # fully non-interactive
excelmcp-setup --dry-run # print the changes, write nothing에이전트에 노출되는 도구
도구 | 네트워크 | 기능 |
| 없음 | 작업 공간의 전체 구조: 파일, 시트, 열, 테이블 영역, 관계, 이름 변형, 스캔 연령. 즉시. |
| 없음 | 동일하지만 하나의 파일로 좁혀짐, 마지막 스캔 기준 대략적인 행 수 포함. 즉시. |
| 무거움 | OneDrive를 다시 크롤링하고 구조, 샘플링된 값, 관계, 임베딩을 재구축합니다. |
| 실시간 | 자연어 질문, 벡터 유사도 및 어휘 재순위화로 라우팅됩니다. |
| 실시간 | 한 번 호출 → 파일/시트/셀 출처 및 신호 신뢰도와 함께 하나의 셀 값. |
| 실시간 | 하나의 주소가 지정된 셀을 하나의 Graph 요청으로 가져옵니다. |
| 실시간 | 시트 하나를 가져와 조건과 일치하는 행을 반환합니다. |
| 실시간 | 시트 하나를 가져와 그룹화하고 축소하며 |
| 실시간 | 모든 파일에서 일치하는 시트를 가져와 총계로 합칩니다. |
| 실시간 | 알려진 관계에서 제안된 키 열을 기준으로 두 시트를 병합합니다. |
| 실시간 | 거래 유형에 대한 부호 있는 합계 — 한 번 호출로 순 재고. |
두 구조 도구는 로컬 그래프를 읽기 때문에 무료이며 즉시 실행됩니다. 실시간으로 표시된 모든 것은 매 호출마다 API로 이동합니다.
사용법
서버가 등록되면 대부분 평소처럼 에이전트와 대화하면 됩니다. 내부적으로는 다음과 같은 호출을 수행합니다.
먼저 방향을 잡습니다. 에이전트는 열 이름을 추측하기 전에 항상 이 작업을 수행해야 합니다. 어떤 두 회사도 같은 방식으로 이름을 짓지 않기 때문입니다:
get_workspace_graph(folder_path="/ERP")답이 어디에 있는지 모르는 상태에서 질문합니다:
query("what are the top 10 products by sales value", folder_path="/ERP")알려진 시트를 필터링합니다:
filter_sheet(
file_name="Inventory.xlsx",
sheet="Stock",
conditions={"Status": "Low", "Quantity": "<50"},
folder_path="/ERP",
sort_by="Quantity",
limit=100,
)지원되는 조건 연산자, 모두 AND로 결합됩니다:
형식 | 의미 |
| 정확히 일치 — 대소문자 및 공백 무시; 엄격하게 하려면 |
| 포함, 리터럴 부분 문자열, 정규식 아님 |
| 보다 큼 ( |
| 날짜 경계, ISO-8601, 감지된 날짜 열에서 작동 |
| 나열된 값 중 하나 |
| 포함 범위, 숫자 또는 날짜 |
| 결합된 경계 |
| null 검사 — 공백 및 빈 문자열은 null로 간주 |
존재하지 않는 열 이름이나 연산자는 오류를 발생시켜 자동으로 0행을 반환하지 않습니다. 이는 에이전트가 잘못된 것을 자신 있게 보고하게 만드는 실패 모드입니다. 조건이 정당하게 아무것도 일치하지 않으면 응답에 zero_match_diagnostics가 포함됩니다 — 각 조건이 자체적으로 일치시킨 내용과 문제가 있는 열에 실제로 있는 최대 20개의 값 — 따라서 근접 실패가 "데이터 없음"으로 보고되는 대신 수정됩니다.
한 번의 호출로 단일 수치를 요청합니다:
lookup(query="contracted rate for Titanium Dioxide under the BESTEX contract",
folder_path="/Contracts")답변은 출처(파일, 시트, 셀 주소, 일치된 행)와 신뢰도 필드와 함께 반환됩니다. 여러 개의 일치 행이 있으면 모든 행과 함께 ambiguous를 반환합니다. 시트 간에 불일치가 있으면 모든 버전과 값 없이 conflict를 반환합니다. 잘못 입력된 키는 퍼지 제안을 반환합니다. 이 도구는 절대 단순한 숫자를 반환하지 않습니다.
하나의 파일 내에서 그룹화하고 축소합니다:
aggregate(
file_name="Sales.xlsx",
sheet="Q1",
group_by="Region",
value_col="Revenue",
operation="sum",
folder_path="/ERP",
)작업 공간의 모든 파일에서 동일한 시트를 합산합니다:
cross_file_aggregate(
sheet="Q1",
value_col="Revenue",
operation="sum",
folder_path="/ERP",
conditions={"Status": "Closed"},
)cross_file_aggregate는 파일별 분석과 함께 총계를 반환하며, 파일을 읽을 수 없는 경우 skipped_files와 정확한 시트 이름을 포함하지 않는 모든 파일에 대해 unmatched_files( did_you_mean 후보 포함)를 반환합니다. 이렇게 하면 부분 총계가 조용히 잘못되는 대신 명확하게 부분임을 알 수 있습니다. 여기에는 일부 파일에서 시트 이름이 Sales이고 다른 파일에서는 Sales 2024인 경우도 포함됩니다. 집계하기 전에 get_workspace_graph에서 sheet_name_variants를 확인하여 이러한 분열을 미리 확인하십시오.
에이전트 플레이북
서버를 설치하는 것은 쉬운 절반입니다. agents/ 폴더는 나머지 절반을 다룹니다: 이러한 도구를 가진 에이전트를 프롬프트하는 방법, 각 호스트에 연결하는 방법, 그리고 작동한 후에 자동화할 내용입니다.
커스텀 에이전트, 서브에이전트, | |
작업별로 분류된 복사-붙여넣기 프롬프트: 오리엔테이션, 직답, 분석, 검증, 보고, 데이터 품질. 마지막에는 안티 프롬프트 세트, 즉 그럴듯해 보이지만 신뢰할 수 있는 오답을 생성하는 표현들이 포함되어 있습니다. | |
체인이 처음부터 끝까지 작동함을 증명하는 첫 번째 세션으로, 데이터가 실제로 실시간임을 직접 확인하는 방법을 포함합니다. | |
지원되는 12개 호스트 구성 각각에 기록되는 내용, 확인 방법, 호스트별 특이 사항, 호스트 없이 프로그래밍 방식으로 서버를 구동하는 방법을 다룹니다. | |
어떤 도구를 사용해야 하는지, 시맨틱 라우팅이 실제로 시트를 선택하는 방법, 조건 구문으로 표현할 수 없는 것, 그리고 확신에 찬 오답을 생성하는 데이터 형태에 대해 설명합니다. | |
PATH 문제와 403 오류부터 잘못된 열 이름과 두 배로 나오는 합계까지, 다양한 증상에 대한 해결 방법을 제공합니다. | |
즉시 사용 가능한 네 가지 루틴: 일일 재고 확인, 주간 매출 요약, 월말 정산, 데이터 품질 감사. 각각 프롬프트, 일정, 그리고 자주 발생하는 문제점이 포함되어 있습니다. |
서버에 내장된 안전장치
서버는 MCP 명령어에 일련의 운영 규칙을 포함하여 제공하며, 호스트 모델은 첫 번째 호출을 하기 전에 이를 읽습니다. 이 규칙들은 LLM이 스프레드시트 질문에 대해 특정 방식으로 오류를 범하기 때문에 존재합니다:
파일 이름, 시트 이름 또는 열 이름을 추정하지 마십시오. 그래프에서 찾으십시오.
여러 파일의 숫자를 머릿속으로 더하지 마십시오.
cross_file_aggregate를 호출하여 도구가 처리하도록 하십시오.openpyxl,pandas.read_excel또는 로컬 파일 시스템을 사용하지 마십시오. 파일은 이 머신에 없습니다.트랜잭션 스타일 데이터에서 수량 열을 원시 합계로 계산하지 마십시오. 트랜잭션 유형을 명시하여
derive를 사용하십시오.날짜 열은 서버에서 직렬 값에서 이미 변환된 ISO-8601 문자열로 도착합니다. 수동으로 직렬 산술을 수행하지 마십시오.
단일 수치의 경우
lookup을 호출하고 반환되는 출처를 인용하십시오. 값을 선택하는 대신ambiguous및conflict결과를 표시하십시오.결과가 완전하다고 주장하기 전에
truncated및total_matched필드를 확인하십시오.
서버 명령어를 무시하는 호스트와 직접 구축하는 커스텀 에이전트는 자체 프롬프트에 이를 명시해야 합니다. agents/system-prompt.md를 참조하십시오.
구성
변수 | 기본값 | 목적 |
| 내장 | Azure AD 애플리케이션 클라이언트 ID |
|
| 테넌트. 개인 계정의 경우 |
| 설정 안 됨 | 도구 호출 시 |
|
| 모든 코드 경로에서 최대 동시 Microsoft Graph 요청 수입니다. |
내장 클라이언트 ID는 장치 코드 흐름에 사용되는 공용 클라이언트입니다. 비밀을 포함하지 않으며, 설계상 모든 인증 요청에 표시되며, 이 저장소에 있어도 안전합니다. 동의 화면에 조직 이름을 표시하려면 자체 앱 등록으로 교체하십시오.
디스크에 저장되는 내용
~/.excelmcp/
token.json MSAL token cache. Auth material only, written 0600.
graph.json Structure graph: item IDs, sheet names, column headers,
used-range dimensions, date column types, per-sheet
table regions, inferred and formula-declared
relationships — and sampled values (see below).
vectors.npy Embedded sheet descriptions for semantic routing.
metadata.json Labels and lexical terms tying each embedding to a sheet.
relationships.yaml Optional, written by you: declared join relationships.0.3.0 기준, 캐시 없음 주장의 정직한 버전입니다. 데이터의 어떤 행, 셀 그리드, 또는 쿼리 가능한 값도 디스크에 저장되지 않습니다. 모든 답변은 항상 실시간 가져오기로 제공됩니다. 한 가지 의도적인 예외가 있습니다: graph.json은 샘플링된 값을 저장하며, 스캔 시점에 캡처된 낮은 카디널리티 열(클라이언트 이름, 상태, 자재 이름, 단위)당 최대 50개의 고유 텍스트 레이블을 저장합니다. 이 값들은 수백 개의 구조적으로 동일한 시트를 질문 라우팅 시 구별할 수 있도록, lookup이 모든 것을 다운로드하지 않고도 "BESTEX"가 포함된 시트를 찾을 수 있도록, 그리고 열 이름에서 가정하는 대신 값 중복에서 관계를 추론할 수 있도록 존재합니다. 이는 라우팅 증거이지 데이터 캐시가 아닙니다. 어떤 것도 이 값들로 질문에 답변하지 않으며, 작업 공간 스캔 시 전체를 새로 고칩니다. 그래프는 또한 시트별 구조 지문(헤더 열 및 사용된 범위 주소)을 드리프트 감지 목적으로만 저장하며, 0.3.0의 새로운 기능으로 영역 맵을 저장합니다: 시트의 자체 SUM/COUNT/AVERAGE 수식이 참조하는 범위와 교차 시트 수식이 읽는 주소에서 파생된 시트의 각 테이블 본문 행 범위입니다. 이는 행 번호와 셀 주소이지 내용이 아닙니다. 값을 읽어 생성되지 않습니다. 영역의 label(있는 경우)은 샘플링된 값과 함께 두 번째 의도적인 예외입니다: 영역 바로 위의 섹션 배너 셀에서 읽은 몇 단어("NAPHTHALENE", "OLEUM 65%")로, 모델이 행 번호에서 추측하는 대신 어떤 테이블을 의미하는지 이름을 지정할 수 있도록 유지됩니다. 이는 시트 레이아웃을 설명하는 구조적 메타데이터이지 행 데이터가 아닙니다. 이는 샘플링된 값이 이미 그리는 것과 동일한 구분입니다. 이 중 어떤 것이든 디스크에 저장하기 싫다면 해당 폴더를 스캔하지 마십시오. 경계를 확인하려면 graph.json이 작고 읽을 수 있으므로 직접 확인하십시오.
Windows에서 os.chmod는 읽기 전용 비트만 전환하므로 0600 모드는 최선의 노력이며 실제 보호는 %USERPROFILE%의 기본 사용자별 ACL입니다. macOS 및 Linux에서는 임시 파일에 내용이 기록되기 전에 모드가 적용되므로 토큰이 세계에서 읽을 수 있는 상태로 잠시 존재하지 않습니다.
테스트
# offline unit tests, no network and no credentials required
pytest tests/test_unit.py
# live integration tests against a workspace you have already scanned, opt in
EXCELMCP_TEST_FOLDER=/ERP pytest tests/test_live_integration.py -v통합 테스트 스위트는 EXCELMCP_TEST_FOLDER가 설정되지 않으면 자체를 건너뛰므로, 일반 pytest 실행은 오프라인 상태를 유지합니다.
프로젝트 레이아웃
agents/ prompts, host guides, and schedulable routines
auth.py MSAL device flow, token cache, proactive refresh
graph_client.py Graph API wrapper, 429 backoff, shared concurrency gate
structure.py Structure discovery, value sampling, relationship inference
embeddings.py FastEmbed vectors, NumPy cosine search, lexical rerank
query_engine.py Conditions, live fetch, aggregation, joins, derive
lookup.py Single-cell lookup pipeline and get_cell
ranges.py A1-notation range arithmetic
main.py FastMCP tool definitions and server entry point
cli.py Setup wizard, agent detection, config writing
agents.py Per agent config formats and file locations
storage.py Atomic writes, stderr logging, config directory handling기여
이슈 및 풀 리퀘스트를 환영합니다. 다른 에이전트에 대한 지원을 추가하는 경우, agents.py만 수정하면 됩니다: 구성 경로, 항목 형태 및 감지 힌트와 함께 AgentSpec을 추가하십시오.
라이선스
MIT. LICENSE를 참조하십시오.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityDmaintenanceA Model Context Protocol server that enables AI assistants to read from and write to Microsoft Excel files, supporting formats like xlsx, xlsm, xltx, and xltm.614,8961,008MIT
- AlicenseBqualityAmaintenanceA Model Context Protocol server that enables interaction with Microsoft 365 services (Excel, Calendar, Mail, OneDrive, Teams, etc.) through the Graph API, allowing AI assistants to manage Microsoft 365 resources via natural language.18841,593937MIT
- AlicenseNot gradedqualityCmaintenanceA Model Context Protocol server that enables AI agents to create, read, and modify Excel workbooks without requiring Microsoft Excel installation.MIT
- AlicenseBqualityDmaintenanceA Model Context Protocol server that enables AI agents to freely operate Excel spreadsheets, providing tools for workbook creation, cell manipulation, formatting, formula handling, and data export.1152ISC
Related MCP Connectors
Official Microsoft MCP Server to query Microsoft Entra data using natural language
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A Model Context Protocol server for Wix AI tools
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Karunya-Muddana/ExcelMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server