MCP server for reading and editing Word (.docx) documents with track changes, comments, footnotes, and structural validation
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio counts 0 tools · 0 res
· 0 prompts
permission surface via code analysis
no tools enumerated yet for this server.
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 5cbd395 · analyzer v17 · 2d ago
skills & prompt files 2
evidence-backed
findings quoted directly from the published source artifact — not inferred
filesystem 17
- fs SecurityRonin-docx-mcp-5cbd395/docx_mcp/cli.py :5
import shutil - fs SecurityRonin-docx-mcp-5cbd395/docx_mcp/document/base.py :8
import shutil - fs SecurityRonin-docx-mcp-5cbd395/docx_mcp/document/changesummary.py :5
from pathlib import Path - fs SecurityRonin-docx-mcp-5cbd395/docx_mcp/document/compare.py :9
from pathlib import Path - fs SecurityRonin-docx-mcp-5cbd395/docx_mcp/document/creation.py :5
import shutil - fs SecurityRonin-docx-mcp-5cbd395/docx_mcp/document/guards.py :6
from pathlib import Path - fs SecurityRonin-docx-mcp-5cbd395/docx_mcp/document/images.py :6
import shutil - fs SecurityRonin-docx-mcp-5cbd395/docx_mcp/document/markdown_export.py :131
with open(output_path, "w", encoding="utf-8") as f: - fs SecurityRonin-docx-mcp-5cbd395/docx_mcp/document/merge.py :7
from pathlib import Path - fs SecurityRonin-docx-mcp-5cbd395/docx_mcp/document/metadata.py :8
from pathlib import Path - fs SecurityRonin-docx-mcp-5cbd395/docx_mcp/document/pdfexport.py :5
import shutil - fs SecurityRonin-docx-mcp-5cbd395/docx_mcp/document/pii.py :9
from pathlib import Path - fs SecurityRonin-docx-mcp-5cbd395/docx_mcp/document/rawparts.py :6
from pathlib import Path - fs SecurityRonin-docx-mcp-5cbd395/docx_mcp/document/sessionlog.py :44
with open(output_path, "w", encoding="utf-8") as f: - fs SecurityRonin-docx-mcp-5cbd395/docx_mcp/document/splitting.py :9
from pathlib import Path - fs SecurityRonin-docx-mcp-5cbd395/docx_mcp/markdown.py :7
from pathlib import Path - fs SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :93
info = doc.open()
shell / exec 1
- shell SecurityRonin-docx-mcp-5cbd395/docx_mcp/document/pdfexport.py :6
import subprocess
tool registrations 200
- open_document SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :78
- close_document SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :103
- create_document SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :118
- create_from_markdown SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :146
- get_document_info SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :203
- get_headings SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :213
- search_text SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :227
- get_paragraph SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :241
- get_tables SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :255
- add_table SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :262
- modify_cell SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :275
- add_table_row SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :304
- delete_table_row SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :318
- merge_cells SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :330
- set_header_row SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :343
- set_column_widths SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :350
- csv_to_table SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :357
- table_to_csv SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :364
- delete_table SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :371
- add_column_to_table SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :377
- delete_column_from_table SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :383
- set_cell_width SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :389
- set_cell_vertical_alignment SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :395
- set_row_height SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :401
- set_table_alignment SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :407
- set_table_borders SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :413
- set_cell_shading SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :428
- set_table_style SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :442
- add_list SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :451
- get_styles SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :465
- create_style SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :472
- update_style SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :492
- delete_style SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :508
- get_style SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :518
- copy_style SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :531
- apply_style_to_range SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :545
- get_headers_footers SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :562
- edit_header_footer SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :569
- delete_header SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :596
- delete_footer SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :602
- get_properties SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :611
- set_properties SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :618
- get_custom_properties SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :638
- set_custom_property SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :644
- delete_custom_property SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :656
- get_images SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :669
- insert_image SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :676
- insert_floating_image SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :689
- delete_image SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :706
- update_image SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :718
- set_image_size SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :731
- set_image_alt_text SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :743
- set_image_border SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :755
- get_endnotes SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :773
- add_endnote SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :780
- validate_endnotes SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :787
- get_footnotes SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :797
- add_footnote SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :804
- add_footnote_ref SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :811
- validate_footnotes SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :823
- update_footnote SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :830
- delete_footnote SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :841
- update_endnote SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :854
- delete_endnote SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :865
- add_page_break SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :881
- add_section_break SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :888
- set_section_properties SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :899
- set_page_size SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :927
- set_page_margins SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :939
- set_page_orientation SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :967
- get_sections SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :978
- set_section_columns SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :990
- delete_section_break SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1006
- set_different_first_page SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1022
- set_odd_even_headers SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1039
- add_cross_reference SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1058
- set_document_protection SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1073
- merge_documents SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1087
- validate_paraids SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1097
- insert_watermark SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1104
- remove_watermark SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1120
- audit_document SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1127
- insert_text SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1137
- delete_text SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1183
- replace_text SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1229
- get_body_text SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1275
- get_tracked_changes SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1290
- accept_changes SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1301
- reject_changes SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1308
- accept_change SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1315
- reject_change SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1328
- accept_all_changes SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1341
- reject_all_changes SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1350
- set_formatting SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1359
- get_comments SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1388
- add_comment SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1395
- reply_to_comment SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1407
- update_comment SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1419
- delete_comment SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1430
- resolve_comment SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1440
- list_comment_threads SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1450
- save_document SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1462
- scrub_pii SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1476
- sanitize_metadata SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1527
- compare_documents SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1555
- diff_to_text SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1580
- generate_change_summary SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1613
- list_parts SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1639
- read_part SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1645
- write_part SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1653
- xpath_query SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1661
- list_bookmarks SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1676
- add_bookmark SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1682
- remove_bookmark SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1688
- get_bookmarked_text SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1694
- list_hyperlinks SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1703
- add_hyperlink SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1713
- add_internal_link SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1728
- remove_hyperlink SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1742
- update_hyperlink SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1755
- add_field SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1769
- update_fields SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1784
- list_fields SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1790
- get_field SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1796
- delete_field SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1806
- insert_date_field SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1816
- insert_page_number_field SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1827
- insert_if_field SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1837
- insert_sequence_field SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1855
- insert_merge_field SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1871
- generate_toc SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1885
- update_toc SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1892
- generate_list_of_figures SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1899
- generate_list_of_tables SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1906
- generate_tof SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1913
- generate_tot SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1923
- add_content_control SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1936
- get_content_controls SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1959
- set_content_control_value SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1966
- lock_content_control SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1978
- delete_content_control SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :1990
- get_content_control SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2001
- update_content_control SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2012
- fill_template SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2038
- list_template_fields SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2050
- validate_template_data SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2057
- create_multilevel_list SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2067
- restart_numbering SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2074
- suppress_numbering SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2081
- get_lists SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2088
- promote_list_item SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2098
- demote_list_item SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2107
- bates_number SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2119
- redact_text SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2135
- generate_redaction_log SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2154
- generate_privilege_log SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2165
- add_equation SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2179
- get_equations SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2191
- insert_bar_chart SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2201
- insert_line_chart SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2218
- insert_pie_chart SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2235
- update_chart_data SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2250
- merge_review_rounds SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2260
- compare_contracts SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2266
- get_session_log SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2275
- export_session_script SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2281
- insert_paragraph SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2293
- update_paragraph SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2309
- delete_paragraph SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2331
- set_paragraph_border SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2341
- set_paragraph_shading SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2359
- set_paragraph_indentation SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2375
- set_keep_with_next SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2403
- set_keep_lines_together SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2414
- set_page_break_before SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2425
- set_widow_control SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2436
- insert_blockquote SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2447
- insert_code_block SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2460
- set_line_spacing SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2474
- get_paragraph_format SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2502
- get_runs SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2517
- set_run_font SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2527
- set_run_color SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2539
- set_run_size SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2551
- set_character_spacing SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2563
- set_character_position SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2575
- set_run_highlight SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2587
- set_run_strikethrough SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2599
- set_run_superscript SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2611
- set_run_subscript SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2622
- set_run_underline SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2633
- clear_run_formatting SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2645
- set_run_language SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2656
- set_text_case SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2668
- export_markdown SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2680
- get_theme_colors SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2696
- set_theme_color SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2706
- insert_caption SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2717
- find_replace_formatted SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2729
- split_document SecurityRonin-docx-mcp-5cbd395/docx_mcp/server.py :2764
declared dependencies 6
- mcp@>=1.0.0
- lxml@>=4.9.0
- mistune@>=3.0
- presidio-analyzer@>=2.2
- presidio-anonymizer@>=2.2
- spacy@>=3.7,<4