adeu
Adeu: AI를 위한 네이티브 변경 내용 추적(Track Changes)
LLM은 마크다운으로 말하고, 변호사는 "변경 내용 추적"으로 말합니다.
Adeu는 Microsoft Word용 "가상 DOM" 역할을 하는 MCP(Model Context Protocol) 서버이자 Python SDK입니다. 이 도구는 AI 에이전트가 기본 서식이나 복잡한 DOCX XML을 손상시키지 않고 자유롭게 문서 텍스트를 편집할 수 있도록 양방향 추상화 계층을 제공합니다.
python-docx와 같은 표준 라이브러리는 처음부터 문서를 생성하는 데는 탁월하지만, 비파괴적인 수정(redlining)에는 취약합니다. Adeu는 .docx 파일을 토큰 효율적인 마크다운 표현으로 변환하여 이 문제를 해결합니다. 이를 통해 AI 에이전트는 OpenXML과 씨름하며 토큰을 낭비하는 대신 문서의 의미론적 내용에만 집중할 수 있습니다.
Adeu는 지능형 프록시로서 AI의 편집 내용을 안전하고 원자적인 트랜잭션으로 처리합니다:
추출(Extract): 문서를 (디스크 또는 실시간 Word에서) 정의된 용어, 상호 참조, 오타 가능성 등이 포함된 **의미론적 부록(Semantic Appendix)**과 함께 LLM 친화적인 CriticMarkup으로 변환합니다. 에이전트는 원시 데이터가 아닌 의미론적 구조부터 작업을 시작합니다.
검증(Validate): 엄격한 안전 게이트 역할을 합니다. 모호한 텍스트 일치나 유효하지 않은 구조적 변경을 파일에 적용하기 전에 자동으로 차단하여 문서의 무결성을 보호합니다.
커밋(Commit): AI의 텍스트 편집 내용을 네이티브 Word 변경 내용 추적(Track Changes)으로 변환합니다. Adeu는 내부적으로 복잡한 XML을 처리하여 기존 레이아웃, 글꼴, 여백 주석이 완벽하게 유지되도록 합니다.
Adeu에서 유지 관리합니다.
설정
전제 조건: Adeu는 빠르고 격리된 실행을 위해 uv를 사용합니다. pip를 통해 설치하는 것이 가장 쉽습니다:
pip install uvmacOS
curl -LsSf https://astral.sh/uv/install.sh | shWindows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Claude Desktop 통합
Adeu를 Claude Desktop에 즉시 추가하려면 다음을 실행하세요:
uvx adeu init[!IMPORTANT] 이 명령은
claude_desktop_config.json을 자동으로 감지하고 업데이트합니다. 이후 Claude Desktop을 재시작하여 새 도구를 로드하세요.
작동 확인
Claude Desktop이 재시작되면 Claude에게 직접 다음 메시지를 입력하여 Adeu가 연결되었는지 확인할 수 있습니다:
"Adeu 도구를 사용하여 DOCX 파일을 읽을 수 있나요?"
설정이 올바르게 완료되었다면, Claude는 Adeu 도구에 액세스할 수 있음을 확인하고 수행 가능한 작업을 설명할 것입니다. Adeu에 대한 언급이 없거나 파일 도구가 없다고 표시되면 uvx adeu init 실행 후 Claude Desktop을 재시작했는지 다시 확인하세요.
Adeu는 Python 3.12+가 필요하므로 uvx가 자동으로 올바른 Python 버전을 다운로드하고 서버를 실행합니다:
{
"mcpServers": {
"adeu": {
"command": "uvx",
"args": ["--from", "adeu", "adeu-server"]
}
}
}Related MCP server: mcp-server-docx
워크플로우
1. 에이전트용 (Claude / MCP)
Adeu는 MCP(Model Context Protocol) 서버로 실행됩니다. 에이전트에게 문서를 안전하게 읽고, 검토하고, 편집할 수 있는 특정 도구를 제공합니다.
MCP Apps UI:
read_docx도구는 최신 MCP Apps UI 프로토콜을 지원합니다. 에이전트가 문서를 읽을 때, Adeu는 Claude 채팅 창 내에 사용자 지정 대화형 마크다운 UI 뷰를 동적으로 렌더링하여 AI의 추론과 함께 추출된 텍스트 및 서식을 시각적으로 검토할 수 있게 합니다!
권장 에이전트 프롬프트: Adeu의 도구는 LLM에 자체 스키마를 자동으로 설명하지만, Claude의 **프로젝트 지침(Project Instructions)**이나 에이전트의 시스템 프롬프트에 다음 컨텍스트를 추가하면 최상의 결과를 보장할 수 있습니다:
역할: 문서 전문가 도구:
read_docx(clean_view=True): 텍스트의 최종 "깔끔한" 버전을 읽어 컨텍스트를 파악합니다.
process_document_batch: 커밋 및 협상 모드. 통합된 변경 목록을 적용합니다. 특정 검색 및 바꾸기 텍스트 편집에는type: "modify"를 사용하고, 기존 변경 내용 추적 및 주석을 ID별로 관리하려면type: "accept","reject","reply"를 사용합니다.
sanitize_docx: 전송 전 정리. 공유하기 전에 위험한 메타데이터, 작성자 이름, 내부 추적 ID를 제거합니다. 기존 마크업을 유지(keep_markup=True)하거나 기준선 대비 깔끔한 델타를 생성할 수 있습니다.
실시간 MS Word 통합
Microsoft Word가 설치된 Windows 환경에서 실행 중인 경우, Adeu는 실시간 부조종사(copilot) 역할을 하여 활성 문서를 바로 앞에서 편집할 수 있습니다.
read_active_word_document: 열려 있는 Word 창에서 텍스트, 변경 내용 추적, 주석을 직접 추출합니다.process_active_word_batch: LLM의 편집 내용을 네이티브 COM 매크로로 변환하여 Word가 캔버스에서 자동으로 텍스트를 입력, 삭제하고 주석을 추가하도록 합니다.
2. 빌더용 (Python SDK)
법률 기술 애플리케이션이나 자동화된 파이프라인을 구축하는 경우 RedlineEngine을 직접 사용하세요. XML 조작의 복잡한 작업을 처리합니다.
from adeu import RedlineEngine, ModifyText
from io import BytesIO
# 1. Load the contract
with open("MSA.docx", "rb") as f:
stream = BytesIO(f.read())
# 2. Define the edit (e.g., from an LLM response)
# Adeu uses fuzzy matching to locate the target text, even if whitespace varies.
edit = ModifyText(
target_text="State of New York",
new_text="State of Delaware",
comment="Standardizing governing law."
)
# 3. Apply changes
engine = RedlineEngine(stream, author="AI Copilot")
engine.apply_edits([edit])
# 4. Save the result
with open("MSA_Redlined.docx", "wb") as f:
f.write(engine.save_to_stream().getvalue())3. CLI
터미널에서 빠르게 문서를 검사하거나 편집 배치를 적용하세요.
# Extract clean text for RAG or prompting
adeu extract contract.docx -o contract.md
# Generate a visual diff between two versions
adeu diff v1.docx v2.docx
# Preview what an edit list (JSON) would look like
adeu markup contract.docx edits.json --output preview.md
# Apply edits to the DOCX
adeu apply contract.docx edits.json --author "Review Bot"
# Scrub author metadata and internal trackers, but keep the visual redlines for the counterparty
adeu sanitize redline.docx -o clean.docx --keep-markup --author "My Firm" --report주요 기능
서식 안전성
Adeu는 문서를 "다시 작성"하지 않습니다. 패치(patch)합니다.
이미지 및 레이아웃: 건드리지 않습니다.
번호 매기기 및 머리글: 유지됩니다.
표 및 목록: 복잡한 그리드 스팬과 다단계 법률 번호 매기기는 명시적으로 보호됩니다.
복잡한 XML: 편집 대상인 텍스트 실행(run)만 수정합니다.
CriticMarkup 표현
중간 표현은 중요합니다. Adeu는 CriticMarkup을 사용하여 변경 사항을 시각화합니다.
마크업 | 의미 | 예시 |
| 삭제 |
|
| 삽입 |
|
| 주석 |
|
의미론적 부록
계약서에는 LLM이 첫 번째 패스에서 놓칠 수 있는 지뢰가 가득합니다(일관성 없이 사용된 정의된 용어, 깨진 상호 참조, 지저분한 문서의 OCR 스타일 오타 등). Adeu는 추출 시 이를 미리 계산하여 텍스트와 함께 구조화된 부록을 에이전트에게 제공합니다.
지능형 매핑
Word 문서는 복잡합니다. "Contract"와 같은 단어는 맞춤법 검사나 서식 기록으로 인해 ["Con", "tract"]와 같은 XML 실행으로 분할될 수 있습니다.
실행 병합(Run Coalescing): Adeu는 이러한 분할을 정규화하여 AI가 "Contract"로 인식하도록 합니다.
퍼지 매칭(Fuzzy Matching): LLM의 메모리와 실제 문서 내용 간의 사소한 공백 차이를 처리합니다.
메타데이터 정리
기존 메타데이터 제거 도구는 레드라인을 깨뜨리거나 데이터를 조용히 삭제합니다. Adeu의 sanitize 명령은 유효한 변경 내용 추적은 유지하면서 위험한 추적기(rsid, 템플릿, 내부 경로, 타임스탬프)와 고아 콘텐츠를 외과적으로 제거합니다. 결정적으로, 무엇이 제거되었고 수신자에게 무엇이 보일지 정확히 증명하는 투명한 감사 보고서를 생성합니다.
Adeu Cloud
기본적으로 핵심 Adeu 레드라인 엔진과 로컬 파일 도구는 완전히 오픈 소스이며 사용자의 컴퓨터에서 완전히 실행됩니다. Adeu는 로컬 문서를 외부로 전송하지 않습니다 (물론 선택한 LLM 제공업체는 에이전트가 읽는 텍스트를 처리하게 됩니다).
하지만 다음 기능을 잠금 해제하기 위해 MCP 서버를 Adeu Cloud에 연결하도록 명시적으로 선택할 수 있습니다:
엔드 투 엔드 워크플로우 (이메일): 계약서는 이메일을 통해 이동하므로, Adeu Cloud를 사용하면 에이전트가 이메일 스레드를 안전하게 가져오고, 검토를 위해 상대방의 DOCX 첨부 파일을 추출하며, 새로 정리된 레드라인이 첨부된 답장을 작성할 수 있습니다.
고급 문서 검증: 복잡한 다중 문서 의미론적 검증 작업을 비동기적으로 실행합니다. 이러한 방대한 컨텍스트를 Adeu Cloud로 안전하게 라우팅하여 처리함으로써 로컬 AI 에이전트가 컨텍스트 창을 소진하거나 속도 제한에 걸리는 것을 방지합니다.
기여
커뮤니티의 기여를 환영합니다! 버그 수정, 기능 추가, 문서 개선 등 무엇이든 좋습니다. 로컬 uv 환경 설정, 테스트 실행, 프로젝트의 엄격한 XML 안전 지침 이해에 대한 지침은 기여 가이드를 참조하세요.
라이선스
MIT 라이선스. 오픈 소스이며 상업용 애플리케이션에서 무료로 사용할 수 있습니다.
Available Tools
11 toolsaccept_all_changesADestructive
Accepts all tracked changes and removes all comments in a single operation, producing a finalized clean document. Use this when a document review is entirely complete and you want to clear all redlines. For selective acceptance/rejection of specific changes, use process_document_batch instead.
| Name | Required | Description | Default |
|---|---|---|---|
| docx_path | Yes | Absolute path to the DOCX file. | |
| output_path | No | Optional output path. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, and description adds that it removes comments and finalizes the document. This aligns well, though it could explicitly mention irreversibility. Still, combined with annotations, the behavior is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences, each serving a distinct purpose: first explaining the operation, second providing usage guidance. No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two parameters and an output schema, the description fully covers the operation, its outcome, and usage context. No information gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema provides 100% description coverage for both parameters. Description does not add any additional semantic value beyond what is already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it accepts all tracked changes and removes comments to produce a finalized document. It uses specific verbs and distinguishes itself from process_document_batch by emphasizing single operation vs. selective processing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use (when review is entirely complete) and when-not-to-use (for selective changes), with direct mention of alternative sibling tool process_document_batch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_email_draftA
Creates an email draft in the user's native draft box (e.g., Outlook/Gmail). Can either start a NEW email, or REPLY to an existing thread. To REPLY, provide 'reply_to_email_id' (the short ID from search_and_fetch_emails). To start a NEW email, omit the ID but provide 'subject' and 'to_recipients'. Allows attaching local files (PDF/DOCX) by providing their absolute paths. The body should be formatted in Markdown.
| Name | Required | Description | Default |
|---|---|---|---|
| body_markdown | Yes | The body of the email in Markdown format. Will be converted to HTML. | |
| reply_to_email_id | No | Provide the short email ID to reply to an existing thread. | |
| subject | No | The subject line. Required if starting a NEW email. | |
| to_recipients | No | List of emails. Required if starting a NEW email. | |
| attachment_paths | No | List of absolute file paths on the local system to attach to the draft. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that drafts are created in the native draft box (not sent), supports Markdown body, and accepts attachments (PDF/DOCX) via absolute paths. It does not mention permissions, limits, or what happens on failure. This is adequate but could add more safety context. Score 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured paragraph that first states the main function, then explains two modes, then attachments, then body format. Every sentence is informative; no redundant or vague statements. It is appropriately sized for the complexity. Score 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 5 parameters and no output schema. The description explains input semantics well but omits what the tool returns (e.g., draft ID or success status). Given the complexity and that sibling tools like search_and_fetch_emails have IDs, the return value is important for chaining. Completeness is slightly lacking, so 3.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. The description adds significant value by explaining the relationship between parameters and the two modes (NEW vs REPLY). It clarifies that reply_to_email_id is required for REPLY, and subject/to_recipients are required for NEW. This goes beyond individual parameter descriptions and provides usage logic. Score 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it creates an email draft in the user's native draft box (Outlook/Gmail). It distinguishes between starting a NEW email and REPLYING to a thread, and references the sibling tool search_and_fetch_emails for the reply ID. This specificity and differentiation merits a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides two modes (REPLY vs NEW) with conditions for each: for REPLY, provide reply_to_email_id; for NEW, provide subject and to_recipients. It also instructs on attachment paths. However, it does not state when NOT to use this tool nor list alternatives, missing full comparatives. Still, the guidance is clear and useful, so 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diff_docx_filesARead-only
Compares two DOCX files and generates a text-based Unified Diff. Use this to see exactly what changed between two versions of a document. By default (compare_clean=True), it compares the 'Accepted' finalized states of both documents. Set compare_clean=False if you need to compare the raw underlying text including Tracked Change CriticMarkup.
| Name | Required | Description | Default |
|---|---|---|---|
| original_path | Yes | Path to the base document. | |
| modified_path | Yes | Path to the new document. | |
| compare_clean | No | If True, compares 'Accepted' state. If False, compares raw text. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, and the description adds operational details about compare_clean parameter behavior and output format. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences front-load purpose and usage, with no redundant information. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a file comparison tool with output schema and annotations, the description adequately covers behavior and parameters. It does not address error conditions but that is acceptable given the output schema fills return details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions already cover all parameters (100% coverage); the description adds nuanced context about the compare_clean flag's effect on tracked changes, enhancing understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Compares two DOCX files and generates a text-based Unified Diff', specifying a specific verb and resource. It distinguishes from siblings as no other tool performs comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It includes 'Use this to see exactly what changed between two versions of a document', providing explicit guidance. However, it does not mention situations to avoid or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
login_to_adeu_cloudA
Logs the user into the Adeu Cloud backend. Securely opens a browser window for authentication.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds the key side effect of opening a browser window for authentication, which is not covered by the openWorldHint annotation. It does not detail if user interaction is required or if it's blocking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that are front-loaded and concise. Every word adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose and behavior adequately. With 0 parameters and an output schema available, it is fairly complete, though it could mention idempotency or prerequisites like being logged out first.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0 parameters, so no parameter documentation is needed. Description does not need to add param semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool logs the user into Adeu Cloud backend via secure browser authentication, with specific verb 'logs' and resource 'Adeu Cloud backend'. It distinguishes from the sibling 'logout_of_adeu_cloud'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for authentication but does not provide explicit guidance on when to use or when not to (e.g., if already logged in). No alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
logout_of_adeu_cloudA
Logs out of the Adeu Cloud backend by clearing the local API key from the OS Keychain.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description discloses that the tool clears the local API key from the OS Keychain, which is a destructive action beyond the openWorldHint annotation. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, concise, front-loaded with the core action. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no params, output schema exists), the description fully covers purpose and side effects. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no parameters and schema coverage is 100%, so description does not need to add parameter details. It is adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action (logs out) and the resource (Adeu Cloud backend), and implicitly differentiates from the sibling tool login_to_adeu_cloud.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description does not explicitly state when to use or when not to use, but the context of logout vs login makes usage obvious. No exclusions or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_local_fileA
Opens a local file in its native desktop application (e.g., Microsoft Word for DOCX files).
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Absolute path to the file to open. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation openWorldHint: true already indicates external side effects. The description adds value by specifying 'native desktop application', clarifying the nature of the side effect. Additional details (e.g., dependency on file associations) would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no redundancy. Every word serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and an output schema (presumably handling success/error), the description is adequate. It could mention the return type or edge cases, but overall completeness is high.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description does not add meaning beyond the schema's definition of 'file_path' as 'Absolute path to the file to open.' Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the action ('opens') and the resource ('local file'), and includes an example ('Microsoft Word for DOCX files') that distinguishes it from sibling tools like read_docx or diff_docx_files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., read_docx for content extraction). The description merely states what it does without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
process_document_batchADestructive
Applies a batch of structural edits, text modifications, and review actions to a document. This is your primary tool for editing DOCX files.
CRITICAL: All changes in the batch evaluate against the ORIGINAL document state. Do not send sequential edits that depend on each other within the same batch (e.g. rename X to Y, then modify Y). Instead, apply the rename in one batch, then modify Y in a subsequent batch.
The changes parameter is a list of operations. Each item MUST have a type:
'modify': Search-and-replace text. Provide exact
target_text(CRITICAL: include surrounding context if the word appears multiple times to ensure unique matching) andnew_text(the replacement).new_textsupports full Markdown structure: '# Heading 1' through '###### Heading 6' at the start of a line for heading styles, 'bold' and 'italic' inline formatting, and blank lines ('\n\n') to splitnew_textinto multiple paragraphs. Multi-paragraph inserts are tracked as one logical revision. To delete text, makenew_textempty. Do NOT manually write CriticMarkup tags ({++, {--, {>>). To add a comment, use the 'comment' parameter.'accept': Finalize a tracked change. Requires
target_id(e.g., 'Chg:12'). (Note: Accepting one half of a paired modify cascades to accept the other half).'reject': Revert a tracked change. Requires
target_id(e.g., 'Chg:12'). (Note: Rejecting one half cascades to reject the other half).'reply': Reply to a comment. Requires
target_id(e.g., 'Com:5') andtext.'insert_row': Insert table row. Requires
target_text(anchor),position('above'/'below'), andcells(Markdown strings).'delete_row': Delete table row. Requires
target_textinside the row to be deleted.
Always provide a realistic author_name for Tracked Changes. This name will be used for attribution in the document's tracked changes and comments.
| Name | Required | Description | Default |
|---|---|---|---|
| original_docx_path | Yes | Absolute path to the source file. | |
| author_name | Yes | Name to appear in Track Changes (e.g., 'Reviewer AI'). | |
| changes | Yes | List of changes to apply. Each change must specify 'type'. | |
| output_path | No | Optional output path. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide destructiveHint: true. The description adds valuable context: all changes evaluate against original state, accept/reject actions cascade, and author_name is required for tracked changes. It also warns against manually writing CriticMarkup tags. This goes beyond the annotation but could mention more about output behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections and front-loaded with purpose and critical notes. While it is lengthy, the complexity of the tool justifies the length. Each part earns its place, though minor redundancy exists (e.g., repeated 'CRITICAL').
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple change types with detailed behaviors), the description covers nearly all necessary context. The schema provides 100% parameter coverage, annotations indicate destructiveness, and an output schema exists (so return values are covered). The description is complete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds significant meaning: for 'modify', it emphasizes including surrounding context for unique matching and explains Markdown support; for 'accept'/'reject', it notes cascading behavior; for row operations, it provides details on anchor text. This greatly enhances understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool applies a batch of structural edits, text modifications, and review actions to DOCX files, and identifies it as the primary editing tool. It distinguishes from sibling tools like accept_all_changes and sanitize_docx by specifying batch operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states it is the primary tool for editing DOCX files and provides a critical guideline about not sending sequential edits that depend on each other within the same batch. It does not explicitly list when not to use the tool, but the context from sibling tools (e.g., read_docx for reading) implies appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_docxARead-only
Reads a DOCX file and extracts its text content. Use this to ingest documents into your context window. By default (clean_view=False), it returns text with inline CriticMarkup (e.g., {++inserted++}, {--deleted--}, {==highlighted==}{>>comment<<}) representing Tracked Changes and Comments. Set clean_view=True ONLY if you want to read the final, clean text, ignoring all redlines and comments.
PAGINATION & OUTLINE:
mode='outline' returns a structural map of headings with page numbers, styles, table presence, and referenced footnotes. Body content is omitted. Use this first on large documents to plan targeted reads.
mode='full' (default) returns the document body. Documents over ~19,000 characters are split into pages; use page=N to read a specific page (1-indexed). Documents under the limit are returned in full on page 1.
Page boundaries differ between clean_view=True and clean_view=False.
The Structural Appendix (defined terms, anchors, diagnostics) is repeated on every page.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Absolute path to the DOCX file. | |
| clean_view | No | If False (default), returns the 'Raw' text with inline CriticMarkup. If True, returns 'Accepted' text. | |
| mode | No | 'full' returns body content (paginated for large docs). 'outline' returns a structural heading map with page numbers; body content is omitted. | full |
| page | No | Page number (1-indexed) for mode='full'. Defaults to 1. Ignored when mode='outline'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond the readOnlyHint annotation, including pagination behavior, CriticMarkup handling, page boundary differences between clean_view settings, and mode-specific behaviors. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with clear sections and front-loaded purpose. It is moderately detailed but every sentence adds value. Could be slightly more concise, but overall well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 4 parameters and no output schema, the description explains input options and return format (text with CriticMarkup, outline structure, pagination). It covers the essential aspects for a read tool, though lacks error scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaningful explanations: clean_view explains CriticMarkup vs accepted text, mode explains outline vs full, page explains 1-indexed pagination. This adds value beyond the schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Reads a DOCX file and extracts its text content', which is a specific verb+resource. It distinguishes between modes and clean_view options. However, it does not explicitly differentiate from sibling tools like diff_docx_files or sanitize_docx, though the purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use each mode (outline for large documents first, clean_view for final text, page for pagination). It does not state when not to use this tool, but the context is clear enough for an agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sanitize_docxADestructive
Sanitizes a DOCX file by stripping dangerous metadata (rsids, author names, template paths, DMS metadata, hidden text, orphaned content) and producing an audit report of everything removed. Use this before sending documents to external parties. Supports three modes: full scrub (for signing/closing), keep-markup (preserves your track changes and open comments), or baseline (recomputes your delta against the original document).
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Absolute path to the DOCX file to sanitize. | |
| output_path | No | Output path for the sanitized file. Defaults to <stem>_sanitized.docx. | |
| keep_markup | No | Keep existing track changes and open comments. Strips resolved comments and all metadata. Use this when sending a redline to counterparty. | |
| baseline_path | No | Path to the original/baseline document. When provided, the tool recomputes your changes as a clean delta against this baseline. Use when Track Changes was off, or to collapse multiple rounds of markup into a single clean redline. | |
| author | No | Replace all author names on track changes and comments with this value. Used with keep_markup or baseline_path. | |
| accept_all | No | Accept all unresolved track changes (full sanitize mode only). Required if the document contains unresolved changes. The report will list every change that was auto-accepted. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint: true, and the description reinforces the destructive nature by detailing what is stripped and that an audit report is produced. It adds significant context beyond annotations, such as the three modes and the specific metadata removed. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a short list of modes. It front-loads the purpose, then usage, then modes. Every sentence provides value with no redundancy. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema, the description does not need to detail return values. It covers the main behavioral aspects (three modes, audit report, metadata stripping). It could mention handling of invalid files or overwrite behavior, but the input schema provides output_path defaults. Still, it is very complete for a complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, but the description enriches parameter meaning by mapping parameters to the three modes (full scrub, keep-markup, baseline). For example, keep_markup corresponds to the keep-markup mode, baseline_path to the baseline mode, and accept_all is used in full scrub. The author parameter is also contextualized.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sanitizes a DOCX file by stripping dangerous metadata and producing an audit report. It lists specific items removed (rsids, author names, etc.) and describes three modes, distinguishing it from siblings like accept_all_changes or diff_docx_files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage context is provided: 'Use this before sending documents to external parties.' The three modes give guidance on when to use each (e.g., keep-markup for redline to counterparty). However, it does not directly exclude alternatives or say when not to use; the sibling list provides alternatives but no explicit comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_and_fetch_emailsARead-only
Searches the user's live email inbox. By default, searches only the Inbox folder (matching what the user sees in their mail client) — this excludes deleted items, drafts, and spam. Use filters to find specific emails (e.g., 'is_unread=True' for new emails, 'days_ago=7' for last week, 'folder=sent' for sent items, 'folder=all' to search the entire mailbox including trash). It returns a list of lightweight email previews. To read the full email body, thread history, and automatically download attachments to local disk, call this tool again and provide the specific email_id. Emails often contain attachments. It is highly recommended to always provide the working_directory parameter so attachments are saved directly to the user's actual project folder. This directory path refers to the user's native operating system, not the LLM's sandbox environment.
| Name | Required | Description | Default |
|---|---|---|---|
| sender | No | Filter by the sender's email address or name. | |
| subject | No | Filter by keywords in the subject line. | |
| has_attachments | No | If True, only returns emails that contain file attachments. | |
| attachment_name | No | Filter by a specific attachment filename. | |
| is_unread | No | If True, returns ONLY unread emails. If False, returns ONLY read emails. Leave empty for both. | |
| days_ago | No | Filter emails received in the last N days (e.g., 7 for last week). | |
| folder | No | The mailbox folder to search in. Defaults to 'inbox' when omitted, which matches what the user sees in their mail client and excludes deleted items, drafts, and spam. Use 'sent' to search sent items. Use 'all' ONLY when the user explicitly asks to search across the entire mailbox including trash/deleted items. | |
| limit | No | Maximum number of emails to retrieve (default: 10). | |
| offset | No | Pagination offset to skip the first N emails. | |
| email_id | No | If provided, fetches the exact full email and downloads its attachments. Accepts short IDs from search results (e.g., 'msg_abc123') OR direct Adeu IDs (e.g., 'adeu_4052'). | |
| working_directory | No | Optional. The current working directory of the project or task. If provided, attachments will be saved here under an 'adeu_attachments' subfolder. If omitted, attachments are saved to the system temp directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true contradicts the description's claim that the tool downloads attachments to local disk, which is a write operation. This inconsistency misleads the agent about the tool's side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is clear and front-loaded with core purpose. While slightly verbose (10 sentences), each sentence adds value and there is minimal redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 11 parameters and no output schema, the description covers essential context: default folder behavior, fetch mode, attachment handling, and working directory. It lacks details on return format but is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. The description adds value by providing usage examples (e.g., 'is_unread=True', 'days_ago=7'), explaining the behavior of email_id (accepts short IDs or Adeu IDs), and recommending working_directory for attachment storage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches the user's live email inbox and fetches full email with attachments when an email_id is provided. It differentiates the two modes and is distinct from sibling tools like create_email_draft.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the fetch mode (by providing email_id) and gives specific filter examples. It also cautions about using 'folder=all' only when explicitly requested. However, it does not explicitly contrast with sibling tools or exclude any use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_documentsA
Validates documents for inconsistencies, contradictions, and risk assessments. To START a new validation, provide 'file_paths' as a JSON-encoded string representing a list of file paths. This will immediately return a task_id. To CHECK the status of a validation, call this tool AGAIN and provide ONLY the 'task_id'. The checking process will poll for up to 50 seconds. If it times out, continue checking.
| Name | Required | Description | Default |
|---|---|---|---|
| file_paths | No | A JSON-encoded string of a list of absolute paths to documents (DOCX, PDF) OR directories to start a new job. Example: '["/path/to/doc1.pdf", "/path/to/doc2.docx"]' | |
| task_id | No | If resuming a pending check, provide the task ID here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits beyond annotations: it returns a task_id immediately, polls for up to 50 seconds during status checks, and advises to continue if timed out. This aligns with the openWorldHint annotation indicating state mutation. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at four sentences, with the purpose front-loaded. It effectively communicates the essential information without unnecessary detail, though it could be slightly more terse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the asynchronous two-phase nature of the tool and the absence of an output schema, the description adequately covers the flow: starting, getting a task_id, checking status with polling, and timeout behavior. It could mention potential errors or result format, but it is generally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the input schema covers both parameters (100% coverage), the description adds significant value by explaining the usage pattern: how to start a validation with file_paths and how to check status with task_id. This clarifies the conditional logic that the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: validating documents for inconsistencies, contradictions, and risk assessments. It differentiates between starting a new validation and checking status, using specific verbs and resource terms. This distinguishes it from sibling tools like diff_docx_files or sanitize_docx.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit instructions on when to use the tool for starting vs. checking a validation, including the required parameters for each case. However, it does not mention when not to use it or suggest alternative sibling tools for similar tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v1.4.5- First observed
accept_all_changes - First observed
create_email_draft - First observed
diff_docx_files - First observed
login_to_adeu_cloud - First observed
logout_of_adeu_cloud - First observed
open_local_file - First observed
process_document_batch - First observed
read_docx - First observed
sanitize_docx - First observed
search_and_fetch_emails - First observed
validate_documents
TDQS
Scored across 11 tools
Each tool targets a distinct operation (auth, email, document reading/editing/finalization/comparison/sanitization/validation) with clear boundaries. No two tools serve overlapping purposes.
All tool names follow a consistent verb_noun snake_case pattern (e.g., accept_all_changes, create_email_draft, sanitize_docx). No mixing of styles or vague verbs.
The 11 tools cover the core functionality (document editing, email handling, authentication) without being excessive. Each tool serves a well-defined purpose.
The set covers read, edit, finalize, compare, sanitize, search/create drafts, and validate. However, adding new comments is not directly exposed (only replying), which is a minor gap.
Maintenance
Related MCP Connectors
Create real Word .docx files from your AI chat: proposals, quotes, contracts, statements of work.
Create real Word .docx files from your AI chat: proposals, quotes, contracts, statements of work.
- ClmentOAuthcom.clment
Contract review that keeps your contracts: cited answers, Word redlines, key-date alerts.
Reusable contract terms and clauses assembled into a Word docx with variables filled.
Related MCP Servers
- AlicenseCqualityFmaintenanceWord document reading and writing MCP implemented in Node.js797 npm11MIT
- FlicenseBqualityCmaintenanceEnables creating professional Word documents from markdown or structured content with fast, customized formatting via natural language.71-
- AlicenseAqualityFmaintenanceLegal document redlining engine that applies AI-generated JSON changes as professional tracked changes with comments in .docx files, producing Word-indistinguishable output.61MIT

BitsBound MCP Serverofficial
AlicenseAqualityDmaintenanceEnables AI-powered contract analysis with partner-level redlines and real OOXML Track Changes for Claude Desktop and Claude.ai.12221 npmMIT