If you're an AI reading this: skill.md has everything you need.Read it โ†’
Explorer/MCP/airmang/hwpx-mcp-server

ํ•œ๊ธ€ mcp hwpx MCP Server

airmang/hwpx-mcp-server

<p align="center"> <h1 align="center">๐Ÿ“„ hwpx-mcp-server</h1> <p align="center"> <strong>ํ•œ๊ธ€(HWPX) ๋ฌธ์„œ๋ฅผ AI๋กœ ์ž๋™ํ™”ํ•˜๋Š” MCP ์„œ๋ฒ„</strong> </p> <p align="center"> ํ•œ๊ธ€ ์›Œ๋“œํ”„๋กœ์„ธ์„œ ์—†์ด ยท ์ˆœ์ˆ˜ ํŒŒ์ด์ฌ ยท ํฌ๋กœ์Šค ํ”Œ๋žซํผ </p> <p align="center"> <a href="https://pypi.org/project/hwpx-mcp-server/"><img src="https://img.shields.io/pypi/v/hwpx-mcp-server?style=flat-square&color=blue" alt="PyPI"></a> <a href="https://pypi.org/project/hwpx-mcp-server/"><img src="https://img.shields.io/pypi/pyversions/hwpx-mcp-server?style=flat-square" alt="Python"></a> <a href="https://github.com/airmang/hwpx-mcp-server/blob/main/LICENSE"><img src="https://img.shields.io/github/license/airmang/hwpx-mcp-server?style=flat-square" alt="License"></a> <a href="https://github.com/airmang/hwpx-mcp-server/actions"><img src="https://img.shields.io/github/actions/workflow/status/airmang/hwpx-mcp-server/test.yml?style=flat-square&label=tests" alt="Tests"></a> </p> </p> --- **hwpx-mcp-server**๋Š” [Model Context Protocol(MCP)](https://modelcontextprotocol.io) ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋Š” ์„œ๋ฒ„๋กœ, [python-hwpx](https://github.com/airmang/python-hwpx) ๊ธฐ๋ฐ˜์—์„œ HWPX ๋ฌธ์„œ์˜ ์—ด๋žŒ ยท ๊ฒ€์ƒ‰ ยท ํŽธ์ง‘ ยท ์ €์žฅ์„ AI ํด๋ผ์ด์–ธํŠธ์—์„œ ์ง์ ‘ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. > **Note** โ€” ์ด ์„œ๋ฒ„๋Š” Open XML ๊ธฐ๋ฐ˜ `.hwpx` ํฌ๋งท์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋ ˆ๊ฑฐ์‹œ ๋ฐ”์ด๋„ˆ๋ฆฌ `.hwp` ํฌ๋งท์€ ์ง์ ‘ ํŽธ์ง‘ ๋Œ€์ƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. <br> ## Why? ๊ตญ๋‚ด ๊ณต๊ณต๊ธฐ๊ด€ยทํ•™๊ตยท๊ธฐ์—…์—์„œ๋Š” ํ•œ๊ธ€ ๋ฌธ์„œ ๊ธฐ๋ฐ˜ ์—…๋ฌด๊ฐ€ ๋งค์šฐ ๋งŽ์ง€๋งŒ, ์ž๋™ํ™”๋Š” ์˜ค๋žซ๋™์•ˆ OS/ํ”„๋กœ๊ทธ๋žจ ์˜์กด์„ฑ์ด ์ปธ์Šต๋‹ˆ๋‹ค. **hwpx-mcp-server**๋Š” ์ด ์ œ์•ฝ์„ ์ค„์ด๋Š” ๋ฐ ์ดˆ์ ์„ ๋งž์ถฅ๋‹ˆ๋‹ค. - โœ… **OS ๋ฌด๊ด€** โ€” Windows, macOS, Linux์—์„œ ๋™์ž‘ - โœ… **ํ•œ๊ธ€ ์›Œ๋“œํ”„๋กœ์„ธ์„œ ๋ถˆํ•„์š”** โ€” ์ˆœ์ˆ˜ ํŒŒ์ด์ฌ ๊ธฐ๋ฐ˜ ์ฒ˜๋ฆฌ - โœ… **AI ๋„ค์ดํ‹ฐ๋ธŒ** โ€” Claude Desktop, VS Code, Gemini CLI ๋“ฑ MCP ํด๋ผ์ด์–ธํŠธ์™€ ์ง์ ‘ ์—ฐ๊ฒฐ - โœ… **Stateless ๊ธฐ๋ณธ ์„ค๊ณ„** โ€” ๋„๊ตฌ ํ˜ธ์ถœ๋งˆ๋‹ค `filename`์„ ๋ช…์‹œํ•ด ์ผ๊ด€์ ์œผ๋กœ ์‹คํ–‰ <br> ## Use Cases - ์‹ค์ „ ์‚ฌ์šฉ ์‚ฌ๋ก€ 9๊ฐœ ๋ณด๊ธฐ: [`docs/use-cases.md`](docs/use-cases.md) - ์ข…ํ•ฉ ํ…Œ์ŠคํŠธ ๋ฆฌํฌํŠธ: [`tests/hwpx_mcp_report_updated.md`](tests/hwpx_mcp_report_updated.md) <br> ## Quick Start ### 1. ์„ค์น˜ & ์‹คํ–‰ [uv](https://docs.astral.sh/uv/getting-started/installation/) ๊ธฐ์ค€: ```bash uvx hwpx-mcp-server ``` ๋˜๋Š” pip ์„ค์น˜: ```bash pip install hwpx-mcp-server hwpx-mcp-server ``` ์š”๊ตฌ์‚ฌํ•ญ: - `Python >= 3.10` - `python-hwpx >= 1.9` ### 2. MCP ํด๋ผ์ด์–ธํŠธ ์„ค์ • <details> <summary><b>Claude Desktop</b></summary> `claude_desktop_config.json`: ```json { "mcpServers": { "hwpx": { "command": "uvx", "args": ["hwpx-mcp-server"] } } } ``` </details> <details> <summary><b>Gemini CLI</b></summary> `~/.gemini/settings.json`: ```json { "mcpServers": { "hwpx": { "command": "uvx", "args": ["hwpx-mcp-server"] } } } ``` </details> <details> <summary><b>VS Code (Copilot Chat)</b></summary> `.vscode/mcp.json`: ```json { "servers": { "hwpx": { "command": "uvx", "args": ["hwpx-mcp-server"] } } } ``` </details> <details> <summary><b>Cursor / Windsurf</b></summary> ๊ฐ ์—๋””ํ„ฐ MCP ์„ค์ • ํŒŒ์ผ์— ๋™์ผํ•œ ๋ธ”๋ก์„ ์ถ”๊ฐ€: ```json { "mcpServers": { "hwpx": { "command": "uvx", "args": ["hwpx-mcp-server"] } } } ``` </details> ### 3. ์ „์†ก ๋ชจ๋“œ ์„ ํƒ (Stdio + Streamable HTTP) ๊ธฐ๋ณธ `stdio` ์‚ฌ์šฉ์€ ๊ธฐ์กด๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ```bash hwpx-mcp-server ``` ๋™์ผํ•œ MCP ๋„๊ตฌ ์„ธํŠธ๋ฅผ Streamable HTTP๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ```bash hwpx-mcp-server --transport streamable-http --host 127.0.0.1 --port 8000 ``` ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ๋„ ๋™์ผํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - `HWPX_MCP_TRANSPORT` (`stdio` ๋˜๋Š” `streamable-http`) - `HWPX_MCP_HOST` (๊ธฐ๋ณธ๊ฐ’: `127.0.0.1`) - `HWPX_MCP_PORT` (๊ธฐ๋ณธ๊ฐ’: `8000`) > ์ฐธ๊ณ : HTTP ์ธ์ฆ์€ ํ˜„์žฌ ๊ฐœ๋ฐœ ํŽธ์˜ ์ค‘์‹ฌ์œผ๋กœ ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜์šฉ ์ธ์ฆ ํ›…์€ ์„œ๋ฒ„ ์ง„์ž…์ ์— TODO๋กœ ๋‚จ๊ฒจ๋‘์—ˆ์Šต๋‹ˆ๋‹ค. <br> ## Features ๊ธฐ๋ณธ ๋ชจ๋“œ์—์„œ 30๊ฐœ ๋„๊ตฌ, ๊ณ ๊ธ‰ ๋ชจ๋“œ(`HWPX_MCP_ADVANCED=1`)์—์„œ ์ถ”๊ฐ€ 10๊ฐœ ๋„๊ตฌ๊ฐ€ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ### ๐Ÿ“– ์ฝ๊ธฐ & ํƒ์ƒ‰ | ๋„๊ตฌ | ์„ค๋ช… | |---|---| | `get_document_info` | ๋ฌธ์„œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ/์„น์…˜/๋ฌธ๋‹จ/ํ‘œ ๊ฐœ์ˆ˜ ์กฐํšŒ | | `get_document_text` | ๋ฌธ์„œ ์ „์ฒด ํ…์ŠคํŠธ ์ถ”์ถœ (`max_chars` ์ง€์›) | | `get_document_outline` | ์ œ๋ชฉ/๊ฐœ์š” ๊ตฌ์กฐ ์ถ”์ถœ | | `get_paragraph_text` | ํŠน์ • ๋ฌธ๋‹จ ํ…์ŠคํŠธ ์กฐํšŒ | | `get_paragraphs_text` | ๋ฌธ๋‹จ ๋ฒ”์œ„ ์กฐํšŒ | | `list_available_documents` | ํด๋” ๋‚ด `.hwpx` ํŒŒ์ผ ๋ชฉ๋ก ์กฐํšŒ | ### ๐Ÿงพ ๋ณ€ํ™˜ & ์ถ”์ถœ (์ž…๋ ฅ ํŽ˜์ด๋กœ๋“œ ๊ธฐ๋ฐ˜) | ๋„๊ตฌ | ์„ค๋ช… | |---|---| | `hwpx_to_markdown` | HWPX ์ž…๋ ฅ์„ Markdown์œผ๋กœ ๋ณ€ํ™˜ | | `hwpx_to_html` | HWPX ์ž…๋ ฅ์„ HTML๋กœ ๋ณ€ํ™˜ | | `hwpx_extract_json` | HWPX ๊ตฌ์กฐ๋ฅผ JSON์œผ๋กœ ์ถ”์ถœ | ๊ณตํ†ต ์ž…๋ ฅ ๊ทœ์น™: - ์ž…๋ ฅ ์†Œ์Šค๋Š” `hwpx_base64` ๋˜๋Š” `url` ์ค‘ ์ •ํ™•ํžˆ ํ•˜๋‚˜๋งŒ ํ—ˆ์šฉ - `url`์€ `https://...`๋งŒ ํ—ˆ์šฉ ๊ณตํ†ต ์˜ต์…˜: - `output`: `full` ๋˜๋Š” `chunks` - `chunk_strategy`: `section` ๋˜๋Š” `paragraph` - `max_chars_per_chunk`: ์ฒญํฌ๋‹น ์ตœ๋Œ€ ๋ฌธ์ž ์ˆ˜(๊ธฐ๋ณธ๊ฐ’: `HWPX_MCP_MAX_CHARS_PER_CHUNK` ๋˜๋Š” `8000`) <details> <summary><b>๋ณ€ํ™˜/์ถ”์ถœ ์‘๋‹ต ์˜ˆ์‹œ</b></summary> #### `hwpx_to_markdown` ```json { "markdown": "# Title\n\nParagraph...", "chunks": ["..."], "meta": { "source_type": "base64", "section_count": 2, "paragraph_count": 10, "table_count": 1, "figure_caption_count": 1 } } ``` #### `hwpx_to_html` ```json { "html": "<!doctype html><html>...</html>", "chunks": ["<section>...</section>"], "meta": { "source_type": "url", "image_policy": "omitted" } } ``` #### `hwpx_extract_json` ```json { "doc": { "title": "Title", "toc": [{ "level": 1, "text": "Title", "paragraph_index": 0 }], "sections": [{ "index": 0, "title": "Title", "paragraphs": [] }], "tables": [], "figures": [] }, "chunks": [{ "chunk_index": 0, "strategy": "section", "section": {} }], "meta": { "source_type": "base64" } } ``` </details> ### ๐Ÿ”Ž ๊ฒ€์ƒ‰ & ์น˜ํ™˜ | ๋„๊ตฌ | ์„ค๋ช… | |---|---| | `find_text` | ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰ + ์ปจํ…์ŠคํŠธ ๋ฐ˜ํ™˜ | | `search_and_replace` | ๋‹จ์ผ ์น˜ํ™˜ (split-run ๋ณด๊ฐ•) | | `batch_replace` | ๋‹ค์ค‘ ์น˜ํ™˜ ์ผ๊ด„ ์‹คํ–‰ | ### โœ๏ธ ํŽธ์ง‘ | ๋„๊ตฌ | ์„ค๋ช… | |---|---| | `add_heading` | ์ œ๋ชฉ(ํ—ค๋”ฉ) ๋ฌธ๋‹จ ์ถ”๊ฐ€ | | `add_paragraph` / `insert_paragraph` / `delete_paragraph` | ๋ฌธ๋‹จ ์ถ”๊ฐ€/์‚ฝ์ž…/์‚ญ์ œ | | `add_page_break` | ํŽ˜์ด์ง€ ๋‚˜๋ˆ„๊ธฐ ์ถ”๊ฐ€ | | `add_memo` / `remove_memo` | ๋ฉ”๋ชจ ์ถ”๊ฐ€/์ œ๊ฑฐ | | `copy_document` | ๋ฌธ์„œ ์•ˆ์ „ ๋ณต์‚ฌ | ### ๐Ÿ“Š ํ‘œ | ๋„๊ตฌ | ์„ค๋ช… | |---|---| | `add_table` / `get_table_text` | ํ‘œ ์ƒ์„ฑ/์กฐํšŒ | | `set_table_cell_text` | ์…€ ํ…์ŠคํŠธ ์ˆ˜์ • | | `merge_table_cells` / `split_table_cell` | ์…€ ๋ณ‘ํ•ฉ/๋ถ„ํ•  | | `format_table` | ํ‘œ ํ—ค๋” ๋“ฑ ๊ธฐ๋ณธ ์„œ์‹ ์ ์šฉ | ### ๐ŸŽจ ์Šคํƒ€์ผ | ๋„๊ตฌ | ์„ค๋ช… | |---|---| | `format_text` | ํ…์ŠคํŠธ ๋ฒ”์œ„ ์„œ์‹ ์ ์šฉ(๊ตต๊ธฐ, ๊ธฐ์šธ์ž„, ๋ฐ‘์ค„, ์ƒ‰์ƒ ๋“ฑ) | | `create_custom_style` | ์ปค์Šคํ…€ ์Šคํƒ€์ผ ์ƒ์„ฑ | | `list_styles` | ๋ฌธ์„œ ์Šคํƒ€์ผ ๋ชฉ๋ก ์กฐํšŒ | ### ๐Ÿ”ฌ ๊ณ ๊ธ‰ (์˜ต์…˜) `HWPX_MCP_ADVANCED=1`์ผ ๋•Œ ํ™œ์„ฑํ™”: | ๋„๊ตฌ | ์„ค๋ช… | |---|---| | `package_parts` | OPC ํŒŒํŠธ ๋ชฉ๋ก ์กฐํšŒ | | `package_get_xml` / `package_get_text` | ํŒŒํŠธ XML/ํ…์ŠคํŠธ ์กฐํšŒ | | `object_find_by_tag` / `object_find_by_attr` | XML ์š”์†Œ ๊ฒ€์ƒ‰ | | `plan_edit` / `preview_edit` / `apply_edit` | ํŽธ์ง‘ ๊ณ„ํš/๋ฏธ๋ฆฌ๋ณด๊ธฐ/์ ์šฉ | | `validate_structure` / `lint_text_conventions` | ๊ตฌ์กฐ ๊ฒ€์ฆ/ํ…์ŠคํŠธ ๋ฆฐํŠธ | <br> ## Configuration | ๋ณ€์ˆ˜ | ์„ค๋ช… | ๊ธฐ๋ณธ๊ฐ’ | |---|---|---| | `HWPX_MCP_MAX_CHARS` | ํ…์ŠคํŠธ ๋ฐ˜ํ™˜ ๋„๊ตฌ ๊ธฐ๋ณธ ์ตœ๋Œ€ ๊ธธ์ด | `10000` | | `HWPX_MCP_MAX_CHARS_PER_CHUNK` | ๋ณ€ํ™˜/์ถ”์ถœ ๋„๊ตฌ์˜ ์ฒญํฌ ๋ถ„ํ•  ๊ธฐ๋ณธ ๊ธธ์ด | `8000` | | `HWPX_MCP_AUTOBACKUP` | `1`์ด๋ฉด ์ €์žฅ ์ „ `.bak` ๋ฐฑ์—… ์ƒ์„ฑ | `1` | | `HWPX_MCP_ADVANCED` | `1`์ด๋ฉด ๊ณ ๊ธ‰ ๋„๊ตฌ ํ™œ์„ฑํ™” | `0` | | `HWPX_MCP_TRANSPORT` | ์„œ๋ฒ„ ์ „์†ก ๋ชจ๋“œ (`stdio`, `streamable-http`) | `stdio` | | `HWPX_MCP_HOST` | HTTP ๋ฐ”์ธ๋”ฉ ํ˜ธ์ŠคํŠธ | `127.0.0.1` | | `HWPX_MCP_PORT` | HTTP ๋ฐ”์ธ๋”ฉ ํฌํŠธ | `8000` | | `LOG_LEVEL` | ๋กœ๊ทธ ๋ ˆ๋ฒจ | `INFO` | ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํฌํ•จ MCP ์„ค์ • ์˜ˆ์‹œ: ```json { "mcpServers": { "hwpx": { "command": "uvx", "args": ["hwpx-mcp-server"], "env": { "HWPX_MCP_MAX_CHARS": "12000", "HWPX_MCP_MAX_CHARS_PER_CHUNK": "8000", "HWPX_MCP_AUTOBACKUP": "1", "HWPX_MCP_ADVANCED": "0", "HWPX_MCP_TRANSPORT": "stdio", "HWPX_MCP_HOST": "127.0.0.1", "HWPX_MCP_PORT": "8000", "LOG_LEVEL": "INFO" } } } } ``` <br> ## Advanced <details> <summary><b>๐Ÿ“ฆ OPC ํŒŒํŠธ ์กฐํšŒ</b></summary> ๊ณ ๊ธ‰ ๋ชจ๋“œ์—์„œ ๋ฌธ์„œ ๋‚ด๋ถ€ ํŒŒํŠธ๋ฅผ ์ง์ ‘ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - `package_parts` - `package_get_xml` - `package_get_text` </details> <details> <summary><b>๐Ÿงญ ํŽธ์ง‘ ํŒŒ์ดํ”„๋ผ์ธ</b></summary> ๊ณ ๊ธ‰ ๋ชจ๋“œ์—์„œ `plan_edit โ†’ preview_edit โ†’ apply_edit` ํ๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝ ๊ณ„ํš์„ ๊ฒ€ํ† ํ•˜๊ณ  ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. </details> <details> <summary><b>๐Ÿงช ๊ตฌ์กฐ/๊ทœ์น™ ๊ฒ€์‚ฌ</b></summary> ๊ณ ๊ธ‰ ๋ชจ๋“œ์—์„œ ๋‹ค์Œ ๊ฒ€์‚ฌ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - `validate_structure` - `lint_text_conventions` </details> <br> ## Testing ```bash # ํ…Œ์ŠคํŠธ ์˜์กด์„ฑ ์„ค์น˜ python -m pip install -e ".[test]" # ์ „์ฒด ํ…Œ์ŠคํŠธ python -m pytest -q ``` ๋กœ์ปฌ ๊ธฐ์ค€(2026-02-22) ์ „์ฒด ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค. - ์‹ค์ „ ์‚ฌ์šฉ ์‚ฌ๋ก€: `docs/use-cases.md` - ์ข…ํ•ฉ ๋ฆฌํฌํŠธ: `tests/hwpx_mcp_report_updated.md` - ํšŒ๊ท€ ํ…Œ์ŠคํŠธ: `tests/test_hwpx_report_regressions.py` <br> ## Architecture ```text hwpx-mcp-server โ”œโ”€โ”€ src/hwpx_mcp_server/ โ”‚ โ”œโ”€โ”€ server.py # Stateless MCP ์ง„์ž…์  โ”‚ โ”œโ”€โ”€ hwpx_ops.py # ๊ณ ๊ธ‰/๋‚ด๋ถ€ ์—ฐ์‚ฐ ๋ž˜ํผ โ”‚ โ”œโ”€โ”€ core/ # ๋ฌธ๋‹จ/ํ‘œ/๊ฒ€์ƒ‰/์„œ์‹ ํ•ต์‹ฌ ๋กœ์ง โ”‚ โ”œโ”€โ”€ tools.py # ํ™•์žฅ ๋„๊ตฌ ์Šคํ‚ค๋งˆ/์ •์˜ โ”‚ โ””โ”€โ”€ schema/ # JSON ์Šคํ‚ค๋งˆ ๋นŒ๋”/์ •๋ฆฌ๊ธฐ โ”œโ”€โ”€ tests/ # ๋‹จ์œ„ + E2E + ํšŒ๊ท€ ํ…Œ์ŠคํŠธ โ””โ”€โ”€ pyproject.toml ``` <br> ## Comparison | | hwpx-mcp-server | hwp(๋ฐ”์ด๋„ˆ๋ฆฌ) COM ์ž๋™ํ™” ๊ณ„์—ด | |---|---|---| | ๋Œ€์ƒ ํฌ๋งท | `.hwpx` (Open XML) | `.hwp` (๋ฐ”์ด๋„ˆ๋ฆฌ) ์ค‘์‹ฌ | | OS | Windows ยท macOS ยท Linux | ๋Œ€์ฒด๋กœ Windows ์ค‘์‹ฌ | | ํ•œ๊ธ€ ํ”„๋กœ๊ทธ๋žจ ์˜์กด | ๋ถˆํ•„์š” | ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ | | ์—ฐ๋™ ๋ฐฉ์‹ | MCP + ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ | ๋ฐ์Šคํฌํ†ฑ ์•ฑ ์ž๋™ํ™” | <br> ## Contributing ๊ธฐ์—ฌ๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. 1. Fork ํ›„ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ 2. ๋ณ€๊ฒฝ + ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€/์ˆ˜์ • 3. `pytest -q` ํ†ต๊ณผ ํ™•์ธ ํ›„ PR <br> ## License [MIT](LICENSE) ยฉ ๊ณ ๊ทœํ˜„ (Kyuhyun Koh) <br> ## Author **๊ณ ๊ทœํ˜„** โ€” ๊ด‘๊ต๊ณ ๋“ฑํ•™๊ต ์ •๋ณดยท์ปดํ“จํ„ฐ ๊ต์‚ฌ - โœ‰๏ธ [[email protected]](mailto:[email protected]) - ๐Ÿ™ [@airmang](https://github.com/airmang)

Tools
0
Indexed
202d ago
Deployment
โ€”
Is this your server?
Link it to your on-chain identity to unlock your RNWY trust score. Your wallet age, ownership history, and behavioral signals carry over โ€” the same trust infrastructure used by 150,000+ registered AI agents.
Claim this server โ†’
Indexed from Smithery ยท Updates nightly
View on Smithery โ†’