UseJunior/safe-docx

UseJunior/safe-docx

от usejunior
Safe Docx — MCP сервер для хирургического редактирования существующих .docx и .odt файлов без потери форматирования. Помогает разработчикам и юристам автоматизировать правки контрактов через ИИ-агентов. Поддерживает отслеживание изменений, комментарии и сноски, сохраняя структуру документа.

Edit Word documents (.docx) with coding agents via MCP — with OpenDocument (.odt) support

CI codecov npm version License: Apache 2.0 GitHub last commit GitHub issues closed

Report Bug · Request Feature

English | Español | 简体中文 | Português (Brasil) | Deutsch

%%{init: {"flowchart": {"htmlLabels": true, "curve": "basis", "nodeSpacing": 30, "rankSpacing": 50}, "themeVariables": {"fontSize": "14px"}} }%%
flowchart LR
    DocInLeft["<b>Existing .docx</b><br/>on disk"]

    subgraph Server["@usejunior/safe-docx — local MCP server"]
        direction LR

        subgraph ReadParse["<b>1. Read</b>"]
            direction TB
            RPTool["<code>read_file(file_path,<br/>&nbsp;&nbsp;format)</code>"]
        end

        subgraph Locate["<b>2. Locate</b>"]
            direction TB
            LocTool["<code>grep(file_path,<br/>&nbsp;&nbsp;pattern)</code>"]
        end

        subgraph Edit["<b>3. Edit</b>"]
            direction TB
            EditTool["<code>replace_text(<br/>&nbsp;&nbsp;target_paragraph_id,<br/>&nbsp;&nbsp;old_string, new_string,<br/>&nbsp;&nbsp;instruction)</code>"]
        end

        subgraph Save["<b>4. Save</b>"]
            direction TB
            SaveTool["<code>save(save_to_local_path,<br/>&nbsp;&nbsp;save_format)</code>"]
        end

        ReadParse --> Locate
        Locate --> Edit
        Edit --> Save
    end

    DocInRight["<b>Saved .docx output</b><br/>on disk"]

    subgraph Client [" "]
        direction TB
        Prompt["<b>Prompt</b><br/>'Change NDA governing law to Delaware'"]
        Agent["<b>Coding agent / MCP client</b><br/>Claude Code · Cursor · Gemini CLI"]
        Prompt --> Agent
    end

    DocInLeft --> RPTool
    SaveTool --> DocInRight
    Agent <-->|tool call / tool result| Server

    classDef io fill:#f5f5f5,stroke:#888,color:#222
    classDef server fill:#eff6ff,stroke:#3b82f6,color:#1e3a8a
    classDef stage fill:#eef2ff,stroke:#6366f1,color:#1e1b4b
    classDef tools fill:#ecfdf5,stroke:#10b981,color:#064e3b
    classDef ext fill:#ddd6fe,stroke:#7c3aed,color:#3b0764
    classDef hidden fill:none,stroke:none
    class DocInLeft,DocInRight io
    class Server server
    class ReadParse,Locate,Edit,Save stage
    class RPTool,LocTool,EditTool,SaveTool tools
    class Prompt,Agent ext
    class Client hidden
accept_changes

Принимает все отслеженные изменения в теле документа, создавая чистый документ без пометок правок. Возвращает статистику принятия.

Принимает все отслеженные изменения в теле документа, создавая чистый документ без пометок правок. Возвращает статистику принятия.

Параметры

  • file_pathstringобязательный

    Path to the DOCX or ODT file.

add_comment

Добавляет комментарий или вложенный ответ к документу. Принимает target_paragraph_id + anchor_text для корневых комментариев или parent_comment_id для ответов. Поддерживает DOCX и ODT (ODT использует office:annotation для комментариев; вложенные ответы доступны только в DOCX).

Добавляет комментарий или вложенный ответ к документу. Принимает target_paragraph_id + anchor_text для корневых комментариев или parent_comment_id для ответов. Поддерживает DOCX и ODT (ODT использует office:annotation для комментариев; вложенные ответы доступны только в DOCX).

Параметры

  • file_pathstringобязательный

    Path to the DOCX or ODT file.

  • target_paragraph_idstring

    Paragraph ID to anchor the comment to (for root comments).

  • anchor_textstring

    Text within the paragraph to anchor the comment to. If omitted, anchors to entire paragraph.

  • parent_comment_idnumber

    Parent comment ID for threaded replies.

  • authorstringобязательный

    Comment author name.

  • textstringобязательный

    Comment body text.

  • initialsstring

    Author initials (defaults to first letter of author name).

add_footnote

Добавляет сноску, привязанную к абзацу. Опционально размещает ссылку после заданного текста с помощью after_text. Примечание: маркеры [^N] в выводе read_file предназначены только для отображения и не являются частью редактируемого текста, используемого replace_text.

Добавляет сноску, привязанную к абзацу. Опционально размещает ссылку после заданного текста с помощью after_text. Примечание: маркеры [^N] в выводе read_file предназначены только для отображения и не являются частью редактируемого текста, используемого replace_text.

Параметры

  • file_pathstringобязательный

    Path to the DOCX or ODT file.

  • target_paragraph_idstringобязательный

    Paragraph ID to anchor the footnote to.

  • after_textstring

    Text after which to insert the footnote reference. If omitted, appends at end of paragraph.

  • textstringобязательный

    Footnote body text.

batch_edit

Единая точка входа для одного агента, применяющая несколько шагов редактирования (replace_text, insert_paragraph) к документу за один вызов. Сначала проверяет все шаги, отклоняет конфликты перед применением чего-либо, затем последовательно выполняет допустимые шаги. Принимает встроенные шаги или массив JSON plan_file_path.

Единая точка входа для одного агента, применяющая несколько шагов редактирования (replace_text, insert_paragraph) к документу за один вызов. Сначала проверяет все шаги, отклоняет конфликты перед применением чего-либо, затем последовательно выполняет допустимые шаги. Принимает встроенные шаги или массив JSON plan_file_path.

Параметры

  • file_pathstringобязательный

    Path to the DOCX or ODT file.

  • stepsobject[]

    JSON array of edit steps. Each step needs step_id, operation, and operation-specific fields.

  • plan_file_pathstring

    Path to a .json file containing an array of edit steps. Mutually exclusive with steps.

clear_formatting

Очищает конкретное форматирование на уровне фрагментов (жирный, курсив, подчеркивание, выделение, цвет, шрифт) из абзацев.

Очищает конкретное форматирование на уровне фрагментов (жирный, курсив, подчеркивание, выделение, цвет, шрифт) из абзацев.

Параметры

  • file_pathstringобязательный

    Path to the DOCX or ODT file.

  • paragraph_idsstring[]

    Paragraph IDs to clear formatting from. If omitted, clears from all paragraphs.

  • clear_highlightboolean

    Remove highlight formatting.

  • clear_boldboolean

    Remove bold formatting.

  • clear_italicboolean

    Remove italic formatting.

  • clear_underlineboolean

    Remove underline formatting.

  • clear_colorboolean

    Remove font color.

  • clear_fontboolean

    Remove font family and size.

close_file

Закрывает открытую сессию файла или закрывает все сессии с явным подтверждением. Поддерживает DOCX, ODT и Google Docs.

Закрывает открытую сессию файла или закрывает все сессии с явным подтверждением. Поддерживает DOCX, ODT и Google Docs.

Параметры

  • file_pathstring

    Path to the DOCX or ODT file.

  • google_doc_idstring

    Google Doc ID or URL (alternative to file_path). Extract from URL: docs.google.com/document/d/{ID}/edit

  • clear_allboolean
  • confirmboolean
compare_documentsтолько чтение

Сравнивает два документа и создаёт документ с отслеживанием изменений. Предоставляет original_file_path + revised_file_path для отдельного сравнения или file_path для сравнения правок сеанса с оригиналом. DOCX и ODF (.odt) поддерживают оба режима. Статистика DOCX считает вставки/удаления как непрерывные диапазоны, показывает количество атомов как insertedAtoms/deletedAtoms и сообщает formatChanges отдельно от modifiedParagraphs. ODF сравнивает с гранулярностью на уровне строк (изменённый абзац размечается на месте — только изменённые фрагменты зачёркиваются или вставляются).

Сравнивает два документа и создаёт документ с отслеживанием изменений. Предоставляет original_file_path + revised_file_path для отдельного сравнения или file_path для сравнения правок сеанса с оригиналом. DOCX и ODF (.odt) поддерживают оба режима. Статистика DOCX считает вставки/удаления как непрерывные диапазоны, показывает количество атомов как insertedAtoms/deletedAtoms и сообщает formatChanges отдельно от modifiedParagraphs. ODF сравнивает с гранулярностью на уровне строк (изменённый абзац размечается на месте — только изменённые фрагменты зачёркиваются или вставляются).

Параметры

  • original_file_pathstring

    Path to the original DOCX or .odt file.

  • revised_file_pathstring

    Path to the revised DOCX or .odt file.

  • file_pathstring

    Path to the DOCX or ODT file.

  • save_to_local_pathstringобязательный

    Path to save the tracked-changes output (DOCX or .odt).

  • authorstring

    Author name for track changes. Default: 'Comparison' (DOCX) or the configured AI author (ODF).

  • engineenum

    Comparison engine (DOCX only). Default: 'auto'.

    autoatomizer
convert_to_odt

Преобразует документ DOCX в OpenDocument Text (.odt) с помощью встроенного конвертера модель-в-модель (без участия LibreOffice). Записывает .odt (по умолчанию: путь источника с расширением .odt), проверяет безопасность упаковки ODF перед записью и возвращает путь к выходному файлу вместе со сводкой `lossiness`, в которой перечислены все пониженные конструкции. Преобразование семантическое и намеренно с потерями: текст, заголовки, полужирный/курсив/подчёркивание, гиперссылки, списки и таблицы сопоставляются; более богатое оформление, отслеживаемые изменения, комментарии, а также верхние и нижние колонтитулы — нет. DOCX на входе, ODT на выходе — Google Docs и входные .odt не поддерживаются.

Преобразует документ DOCX в OpenDocument Text (.odt) с помощью встроенного конвертера модель-в-модель (без участия LibreOffice). Записывает .odt (по умолчанию: путь источника с расширением .odt), проверяет безопасность упаковки ODF перед записью и возвращает путь к выходному файлу вместе со сводкой `lossiness`, в которой перечислены все пониженные конструкции. Преобразование семантическое и намеренно с потерями: текст, заголовки, полужирный/курсив/подчёркивание, гиперссылки, списки и таблицы сопоставляются; более богатое оформление, отслеживаемые изменения, комментарии, а также верхние и нижние колонтитулы — нет. DOCX на входе, ODT на выходе — Google Docs и входные .odt не поддерживаются.

Параметры

  • file_pathstring

    Path to the DOCX or ODT file.

  • output_pathstring

    Where to write the .odt. Defaults to the source path with the .odt extension.

  • allow_overwriteboolean

    Overwrite output_path if it already exists. Default: false.

delete_comment

Удаляет комментарий и все его ответы с вложенными обсуждениями из документа. Каскадно удаляет все дочерние элементы.

Удаляет комментарий и все его ответы с вложенными обсуждениями из документа. Каскадно удаляет все дочерние элементы.

Параметры

  • file_pathstringобязательный

    Path to the DOCX or ODT file.

  • comment_idnumberобязательный

    Comment ID to delete.

delete_footnote

Удаляет сноску и её ссылку из документа.

Удаляет сноску и её ссылку из документа.

Параметры

  • file_pathstringобязательный

    Path to the DOCX or ODT file.

  • note_idnumberобязательный

    Footnote ID to delete.

export

Экспортирует документ в портативное представление (Markdown, семантический HTML или обычный текст). Записывает выходной файл (по умолчанию: путь к исходному файлу с расширением формата, например .md, .html или .txt) и возвращает его путь, размер в байтах и преобразованное содержимое (в поле `content`). Умышленно с потерями (необратимо); HTML — это семантический уровень, а не пиксельная точность. Только DOCX - Google Docs не поддерживается.

Экспортирует документ в портативное представление (Markdown, семантический HTML или обычный текст). Записывает выходной файл (по умолчанию: путь к исходному файлу с расширением формата, например .md, .html или .txt) и возвращает его путь, размер в байтах и преобразованное содержимое (в поле `content`). Умышленно с потерями (необратимо); HTML — это семантический уровень, а не пиксельная точность. Только DOCX - Google Docs не поддерживается.

Параметры

  • file_pathstring

    Path to the DOCX or ODT file.

  • formatenum

    Output format: 'markdown' (default, writes .md), 'html' (writes .html), or 'plaintext' (writes .txt).

    markdownhtmlplaintext
  • output_pathstring

    Where to write the rendering. Defaults to the source path with the format extension.

  • allow_overwriteboolean

    Overwrite output_path if it already exists. Default: false.

  • include_markdownboolean

    Include the rendered content (under `content`) in the response. Default: true; set false for large documents.

extract_revisionsтолько чтение

Извлекает отслеживаемые изменения в виде структурированного JSON с текстом «до» и «после» для каждого абзаца, сведениями о ревизии и комментариями. Поддерживает пагинацию через offset и limit. Только чтение - не изменяет документ.

Извлекает отслеживаемые изменения в виде структурированного JSON с текстом «до» и «после» для каждого абзаца, сведениями о ревизии и комментариями. Поддерживает пагинацию через offset и limit. Только чтение - не изменяет документ.

Параметры

  • file_pathstringобязательный

    Path to the DOCX or ODT file.

  • offsetnumber

    0-based offset for pagination. Default: 0.

  • limitnumber

    Max entries per page (1-500). Default: 50.

format_layout

Применяет элементы управления макетом (межстрочный интервал, высота строк таблицы, внутренние отступы ячеек). Google Docs поддерживает только межстрочный интервал.

Применяет элементы управления макетом (межстрочный интервал, высота строк таблицы, внутренние отступы ячеек). Google Docs поддерживает только межстрочный интервал.

Параметры

  • file_pathstring

    Path to the DOCX or ODT file.

  • google_doc_idstring

    Google Doc ID or URL (alternative to file_path). Extract from URL: docs.google.com/document/d/{ID}/edit

  • strictboolean
  • paragraph_spacingobject
  • row_heightobject
  • cell_paddingobject
get_commentsтолько чтение

Получает все комментарии из документа с идентификаторами, авторами, датами, текстом и идентификаторами прикреплённых абзацев. Комментарии DOCX с привязкой к диапазону также предоставляют опциональные поля end_paragraph_id, start_run_index, start_char_offset, end_run_index и end_char_offset, описывающие охваченный диапазон. Включает ответы в виде цепочек (DOCX). Поддерживает DOCX и ODT. Только для чтения.

Получает все комментарии из документа с идентификаторами, авторами, датами, текстом и идентификаторами прикреплённых абзацев. Комментарии DOCX с привязкой к диапазону также предоставляют опциональные поля end_paragraph_id, start_run_index, start_char_offset, end_run_index и end_char_offset, описывающие охваченный диапазон. Включает ответы в виде цепочек (DOCX). Поддерживает DOCX и ODT. Только для чтения.

Параметры

  • file_pathstringобязательный

    Path to the DOCX or ODT file.

get_file_statusтолько чтение

Получает метаданные файла/сеанса, включая количество правок, статистику нормализации и информацию о кэше. Поддерживает DOCX, ODT и Google Docs.

Получает метаданные файла/сеанса, включая количество правок, статистику нормализации и информацию о кэше. Поддерживает DOCX, ODT и Google Docs.

Параметры

  • file_pathstring

    Path to the DOCX or ODT file.

  • google_doc_idstring

    Google Doc ID or URL (alternative to file_path). Extract from URL: docs.google.com/document/d/{ID}/edit

get_footnotesтолько чтение

Получает все сноски из документа с идентификаторами, отображаемыми номерами, текстом и идентификаторами привязанных абзацев. Только для чтения.

Получает все сноски из документа с идентификаторами, отображаемыми номерами, текстом и идентификаторами привязанных абзацев. Только для чтения.

Параметры

  • file_pathstringобязательный

    Path to the DOCX or ODT file.

grepтолько чтение

Ищет абзацы с помощью регулярного выражения. Использует file_path для поиска в рамках сессии, file_paths для поиска без сохранения состояния в нескольких файлах или google_doc_id для Google Документов. ODT поддерживается только через file_path (один файл).

Ищет абзацы с помощью регулярного выражения. Использует file_path для поиска в рамках сессии, file_paths для поиска без сохранения состояния в нескольких файлах или google_doc_id для Google Документов. ODT поддерживается только через file_path (один файл).

Параметры

  • file_pathstring

    Path to the DOCX or ODT file.

  • google_doc_idstring

    Google Doc ID or URL (alternative to file_path). Extract from URL: docs.google.com/document/d/{ID}/edit

  • file_pathsstring[]

    Multiple file paths for stateless multi-file search. No session created.

  • patternsstring[]
  • patternstring
  • case_sensitiveboolean
  • whole_wordboolean
  • max_resultsnumber
  • context_charsnumber
  • dedupe_by_paragraphboolean
  • search_xmlboolean

    When true, search raw XML (word/document.xml) instead of paragraph text.

  • include_contextboolean

    When false, skip document view context (list labels, headers) for faster results. Default: true.

has_tracked_changesтолько чтение

Проверяет, содержит ли тело документа маркеры отслеживаемых изменений (вставки, удаления, перемещения и записи об изменении свойств). Только для чтения.

Проверяет, содержит ли тело документа маркеры отслеживаемых изменений (вставки, удаления, перемещения и записи об изменении свойств). Только для чтения.

Параметры

  • file_pathstringобязательный

    Path to the DOCX or ODT file.

insert_paragraph

Вставляет абзац до или после опорного абзаца по его идентификатору. Поддерживает DOCX, ODT и Google Docs. (Идентификаторы абзацев ODT позиционные и смещаются после вставки, перечитывайте перед дальнейшими правками.)

Вставляет абзац до или после опорного абзаца по его идентификатору. Поддерживает DOCX, ODT и Google Docs. (Идентификаторы абзацев ODT позиционные и смещаются после вставки, перечитывайте перед дальнейшими правками.)

Параметры

  • file_pathstring

    Path to the DOCX or ODT file.

  • google_doc_idstring

    Google Doc ID or URL (alternative to file_path). Extract from URL: docs.google.com/document/d/{ID}/edit

  • positional_anchor_node_idstringобязательный
  • new_stringstringобязательный
  • instructionstringобязательный
  • positionenum
    BEFOREAFTER
  • style_source_idstring

    Paragraph _bk_* ID to clone formatting (pPr and template run) from instead of the positional anchor. Falls back to anchor with a warning if not found.

read_fileтолько чтение

Читает содержимое документа (DOCX, ODT или Google Doc). Вывод по умолчанию ограничен ~14 тысячами токенов, с метаданными пагинации (has_more, next_offset). Используйте offset/limit для пагинации.

Читает содержимое документа (DOCX, ODT или Google Doc). Вывод по умолчанию ограничен ~14 тысячами токенов, с метаданными пагинации (has_more, next_offset). Используйте offset/limit для пагинации.

Параметры

  • file_pathstring

    Path to the DOCX or ODT file.

  • google_doc_idstring

    Google Doc ID or URL (alternative to file_path). Extract from URL: docs.google.com/document/d/{ID}/edit

  • offsetnumber

    1-based paragraph offset for pagination. Negative values count from end.

  • limitnumber

    Max paragraphs to return. When omitted, output is token-limited to ~14k tokens with pagination.

  • node_idsstring[]
  • formatenum
    toonjsonsimple
  • comment_renderingenum

    How to render comments in read_file output. Use "paragraph_notes" (default) for paragraph-local comment threads, "inline_markers" to add `[cm-start:N]`/`[cm-end:N]` milestones in TOON output (combined with the thread blocks), "endnotes" to collect threaded comments into a trailing #COMMENTS block in TOON output, or "none" for the legacy output with no comment rendering.

    noneparagraph_notesendnotesinline_markers
  • show_formattingboolean

    When true (default), shows inline formatting tags (<b>, <i>, <u>, <highlighting>, <a>). When false, emits plain text with no inline tags.

  • include_fingerprintboolean

    When true and format="json", include a portable content_fingerprint ("sha256:nfkc:<32hex>") on each paragraph. Read-only metadata derived from the paragraph's normalized visible text; NOT an edit anchor. Edit tools accept only `_bk_*` IDs. No effect on TOON/simple output. Ignored for Google Docs and ODT.

  • include_footnotesboolean

    When true and format="json", attach a `footnotes` array ({id, display_number, text}) to each paragraph node for the footnotes anchored to it. Windowed to the returned slice (a paginated walk returns each footnote exactly once) and counted toward the read token budget. Footnotes with an empty body or no anchored paragraph are excluded — use get_footnotes for the authoritative full enumeration. No effect on TOON/simple output. Ignored for Google Docs and ODT. Default: false.

replace_text

Заменяет текст в абзаце по указанному идентификатору абзаца, сохраняя форматирование, где это поддерживается. Поддерживает DOCX, ODT и Google Docs.

Заменяет текст в абзаце по указанному идентификатору абзаца, сохраняя форматирование, где это поддерживается. Поддерживает DOCX, ODT и Google Docs.

Параметры

  • file_pathstring

    Path to the DOCX or ODT file.

  • google_doc_idstring

    Google Doc ID or URL (alternative to file_path). Extract from URL: docs.google.com/document/d/{ID}/edit

  • target_paragraph_idstringобязательный
  • old_stringstringобязательный
  • new_stringstringобязательный
  • instructionstringобязательный
  • normalize_firstboolean

    Merge format-identical adjacent runs before searching. Useful when text is fragmented across runs.

save

Сохраняет документ. Для DOCX: сохраняет чистый вывод и/или вывод с отслеживанием изменений. Для ODT: сохраняет пакет .odt. Для Google Docs: контрольная точка (по умолчанию) возвращает revisionId, или снимок экспортирует как DOCX.

Сохраняет документ. Для DOCX: сохраняет чистый вывод и/или вывод с отслеживанием изменений. Для ODT: сохраняет пакет .odt. Для Google Docs: контрольная точка (по умолчанию) возвращает revisionId, или снимок экспортирует как DOCX.

Параметры

  • file_pathstring

    Path to the DOCX or ODT file.

  • google_doc_idstring

    Google Doc ID or URL (alternative to file_path). Extract from URL: docs.google.com/document/d/{ID}/edit

  • save_to_local_pathstringобязательный
  • clean_bookmarksboolean
  • save_formatenum
    cleantrackedboth
  • allow_overwriteboolean
  • tracked_save_to_local_pathstring
  • tracked_changes_authorstring
  • tracked_changes_engineenum
    autoatomizer
  • fail_on_rebuild_fallbackboolean

    When true, return an error instead of a destructive output if the comparison engine falls back to rebuild mode (which destroys table structure). Default: false.

update_footnote

Обновляет текстовое содержимое существующей сноски.

Обновляет текстовое содержимое существующей сноски.

Параметры

  • file_pathstringобязательный

    Path to the DOCX or ODT file.

  • note_idnumberобязательный

    Footnote ID to update.

  • new_textstringобязательный

    New footnote body text.

Другие проверенные MCP-сервера

Couchbase-Ecosystem/mcp-server-couchbase

Couchbase-Ecosystem/mcp-server-couchbase

официальный

MCP-сервер для Couchbase, который даёт языковым моделям прямой доступ к кластерам: выполнять SQL++ запросы, управлять документами, проверять здоровье и производительность. Полезен разработчикам, интегрирующим ИИ-агенты с Couchbase.

Python34
chatmcp/mcp-server-chatsum

chatmcp/mcp-server-chatsum

MCP-сервер для суммаризации чат-сообщений. Позволяет запрашивать и обобщать переписку с помощью инструмента query_chat_messages. Полезен для анализа бесед и быстрого получения выжимки из чатов.

TypeScript1030
vkhanhqui/figma-mcp-go

vkhanhqui/figma-mcp-go

Открытый Figma MCP-сервер с полным доступом на чтение и запись через плагин. Не требует API и не имеет лимитов — подходит дизайнерам и разработчикам. Работает с AI-инструментами. Управляйте стилями...

Go1178
anaisbetts/mcp-installer

anaisbetts/mcp-installer

MCP сервер, который автоматически устанавливает другие MCP серверы из npm и PyPi по запросу. Помогает разработчикам и пользователям Claude быстро добавлять нужные инструменты через простые команды. Требует npx и uv.

JavaScript1532
QuantConnect/mcp-server

QuantConnect/mcp-server

официальный

Официальный MCP сервер QuantConnect — мост между AI-ассистентами и платформой. Через API позволяет создавать проекты, писать стратегии, запускать бэктесты и управлять live-трейдингом. Удобен для ра...

Python78
Azure/azure-mcp

Azure/azure-mcp

официальный

MCP-сервер для Azure, упрощающий подключение ИИ-агентов к облачным ресурсам. Разработчики используют его для безопасного доступа к данным и автоматизации операций. Интеграция с Azure AI и службами через единый протокол.

C#1226
© Каталог MCP, 2026. Все права защищены.
Проект не аффилирован с Anthropic и любыми упомянутыми продуктами.
Все названия и торговые марки принадлежат их владельцам.
Контакты для связи: hi@mcp-katalog.ru

Лука Никитин