mcpField
F
Fsext Mcp Server Python

Fsext Mcp Server Python

ローカル
github.com/kurtzhiメディア・デザイン017 週間前に更新

Fsext Mcp Server Python について

Fsext Mcp Server Pythonは、エージェントやMCPクライアント向けのローカルファイルシステム用MCPサーバーです。ファイル操作に加え、画像処理、OCR、検索を備え、指定したワークスペース内に操作を制限できます。

主な機能

  1. 01ファイルとディレクトリの管理
  2. 02テキストとバイナリのストリーム入出力
  3. 03再帰検索と置換
  4. 04画像のリサイズ、切り抜き、回転
  5. 05TesseractによるOCR
  6. 06ワークスペースルートの分離

活用シーン

  1. 01ワークスペース内のファイル管理
  2. 02複数ファイルのテキスト検索と置換
  3. 03後続タスク向けの画像処理
  4. 04画像からのテキスト抽出

MCP 対応

ファイルシステム、画像、OCR、検索の操作をMCPツールとして提供します。stdio、SSE、Streamable HTTPに対応し、操作対象を指定ルート内に制限できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"fsext-mcp-server-python": {
"command": "uvx",
"args": [
"fsext-mcp-server"
]
}
}
}
起動コマンドuvx fsext-mcp-server

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypifsext-mcp-server

ツール

22

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
recursivebooleanはい
only_filesbooleanはい
source_dirstringはい
file_extensionanyいいえ

詳細

FsExt-MCP-Server (Python)

概要

ローカルファイルシステム操作向けの、画像処理、OCR、メディアツールを組み込んだフル機能のセキュアな MCP サーバーです。公式の Model Context Protocol 仕様に完全準拠し、標準化されたリクエスト/レスポンススキーマ、大容量ファイルのストリーミング I/O、複数トランスポートによるリモートデプロイ、LLM エージェントとの統合に適した包括的なテキスト検索・置換機能を提供します。

主な機能
  • ファイルとディレクトリの完全な管理:ファイルの作成、削除、コピー、移動、メタデータの照会、存在確認に対応します。上書き時の安全制御を備え、ディレクトリツリー全体を再帰的にコピーまたは移動できます。
  • ストリーミングによるファイルの読み書き:テキスト全体の読み取り、行単位での分割テキスト読み取り、チャンク単位でのバイナリ読み取り、テキスト/バイナリの上書きおよび追記に対応します。大容量ファイル全体をメモリに読み込まないよう最適化されています。
  • 強力な検索・置換:ディレクトリ内のファイルコンテンツを再帰的に検索できます。設定可能な前後の一致行を含む単一ファイル/複数ファイルのコンテキスト検索、正規表現検索、大文字と小文字を区別しない検索、インプレースのテキスト置換に対応し、一致数の統計も提供します。
  • 画像処理ツール:Pillow を利用した高性能な画像ツールキットを内蔵しており、サイズ変更(アスペクト比の固定とキャンバスのパディングに対応)、切り抜き、任意の角度での時計回りの回転が可能です。
  • Tesseract ネイティブ OCR 認識:画像からの信頼性の高いテキスト抽出には、ローカルへの Tesseract バイナリのインストールが必要です。WASM によるフォールバックはありません。バイナリパスの引数を空にしても、代替となる JavaScript ベースの OCR エンジンは起動しません。複数言語の tessdata リソースに対応し、バイナリとデータのパスを設定できます。
  • 厳密な入力検証と統一レスポンス形式:すべてのツールで additionalProperties: false のスキーマ検証を有効にし、想定外の入力フィールドを拒否します。すべての操作で共通の成功/エラーラッパー構造を使用し、クライアントによる一貫した解析を可能にします。
  • 複数トランスポート対応:公式の標準 MCP トランスポートである stdio(ローカルのデスクトップクライアントとの統合)、sse(従来型の軽量なリモートストリーム)、Streamable HTTP(最新の双方向リモートストリーミングトランスポート)に対応します。
  • ワークスペースのセキュリティ分離:--lock-root によるディレクトリ制限機能を提供します。すべてのファイル/ディレクトリ操作を指定されたルートワークスペース内に厳密に制限し、許可されていないディレクトリ間のパス逸脱攻撃を防止します。

クイックスタート:uvx で直接実行(事前インストール不要)

uvx は公開済みの PyPI パッケージを自動的に取得し、分離されたランタイム環境を起動するため、依存関係の手動インストールや仮想環境のセットアップは不要です。

1. 基本的な uvx 起動コマンド
短いコマンド(推奨)
# Default stdio mode, unrestricted full filesystem access
uvx fsext-mcp-server

# Lock all operations to a dedicated workspace (production security recommended)
uvx fsext-mcp-server --lock-root /your/workspace
完全なコマンド
# Stdio mode with workspace isolation
uvx fsext-mcp-server --transport stdio --lock-root /your/workspace

# Remote SSE streaming service
uvx fsext-mcp-server --transport sse --host 0.0.0.0 --port 8000 --lock-root /your/workspace

# Modern Streamable HTTP remote service
uvx fsext-mcp-server --transport http --host 0.0.0.0 --port 8000 --lock-root /your/workspace
2. FsExt ツールを LLM フレームワークと統合する

ホストマシンへの事前デプロイは不要です。MCP クライアントが接続を確立すると、uvx がサーバーを動的に起動します。

クライアント設定の例(Claude Desktop/Cursor MCP json)
{
  "mcpServers": {
    "fsext": {
      "command": "uvx",
      "args": [
        "fsext-mcp-server",
        "--lock-root",
        "/your/workspace"
      ],
      "env": {"PYTHONUTF8": "1"}
    }
  }
}
LangChain/LangGraph のコア統合スニペット

公式の langchain-mcp-adapters にはセッションライフサイクルの制限があります。安定した長時間接続のロジックを完全に実現するには、アダプターの追加カスタマイズが必要です。以下は、標準的な最小構成の接続テンプレートです。

# Core config: Connect to FsExt MCP via uvx stdio transport
server_config = {
    "fsext": {
        "transport": "stdio",
        "command": "uvx",
        "args": ["fsext-mcp-server", "--lock-root", r"/your/workspace"],
        "env": {"PYTHONUTF8": "1"}
    }
}

# Load all exposed filesystem MCP tools
client = MultiServerMCPClient(server_config)
async with client.session("fsext") as session:
    mcp_tools = await load_mcp_tools(session)

# Bind loaded MCP tools to LLM instance for agent workflows
llm = ChatOpenAI(base_url="your-local-llm-api").bind_tools(mcp_tools)

pip による従来のインストールと起動

公開済みの PyPI パッケージをインストール
pip install fsext-mcp-server
pip インストール後の起動コマンド
# Default stdio local mode
fsext-mcp-server-py
fsext-mcp-server

# Short alias
fsext-py
fsext

# Secure workspace locked mode
fsext --lock-root /your/workspace

# Remote SSE streaming server
fsext --transport sse --port 8000
ローカルソースリポジトリの開発環境セットアップ

高速で再現性の高い環境デプロイのため、uv の使用を推奨します。

# Clone official source repository
git clone https://github.com/kurtzhi/fsext-mcp-server-python
cd fsext-mcp-server-python

# Install full runtime + dev dependencies
uv sync
コア実行時依存関係の説明
  • chardet:テキストファイルのエンコーディングを自動検出します
  • Pillow:サイズ変更、切り抜き、回転のパイプラインを支えるコアイメージ処理バックエンドです
  • python-magic:クロスプラットフォームで正確なファイル MIME タイプの識別を行います
  • fastmcp:公式の Python MCP サーバーフレームワークです
  • uvicorn / starlette:HTTP/SSE トランスポートサーバーの実行環境です
  • pydantic:すべてのツール入力パラメーターに対する厳密なスキーマ検証を行います
  • tesseract:ローカルの Tesseract OCR バイナリ用ネイティブバインディングです

起動方法

サーバーは、3 種類の公式 MCP トランスポートモードと、CLI フラグによる柔軟なワークスペースルート分離設定に対応しています。

起動パラメーターのリファレンス表
パラメーターデフォルト値説明
--transportstdioMCP トランスポートの種類:stdio / sse / http
--host127.0.0.1ネットワークのバインドアドレス(stdio トランスポートでは無視されます)
--port8000サービスのバインドポート(stdio トランスポートでは無視されます)
--lock-rootNoneすべてのファイルシステム操作をこのルートディレクトリ内に制限します。省略すると、制限なしでアクセスできます
本番環境でよく使われる起動コマンド
1. デフォルトのローカル Stdio モード(Claude Desktop / Cursor AI クライアント向け)
uv run -m fsext
2. ワークスペースロックを必須にする Stdio モード(セキュアなローカルエージェント向け)
uv run -m fsext --lock-root /your/workspace/path
3. リモート SSE トランスポートモード
uv run -m fsext --transport sse --host 0.0.0.0 --port 8000
アクセスエンドポイント
  1. SSE の長時間接続ストリーム購読チャネル(サーバーイベントのプッシュ): http://<host>:<port>/sse
  2. クライアントの JSON-RPC リクエスト送信チャネル: http://<host>:<port>/messages
MCP Inspector の接続設定
  • トランスポートの種類:SSE
  • 接続アドレスの入力:http://127.0.0.1:8000/sse
4. 標準 Streamable HTTP リモートトランスポート(最新の双方向方式)
uv run -m fsext --transport http --host 0.0.0.0 --port 8000
統合双方向アクセスエンドポイント

クライアントリクエストとサーバーストリーミングの両方に共通の単一エントリーポイントを使用します: http://<host>:<port>/mcp

MCP Inspector の接続設定
  • トランスポートの種類:Streamable HTTP
  • 接続アドレスの入力:http://127.0.0.1:8000/mcp
5. SSE と Streamable HTTP のトランスポート機能比較
機能SSE の二重エンドポイントトランスポートStreamable HTTP の単一エンドポイントトランスポート
エンドポイント構成2 つの独立したエンドポイント:GET によるストリーム購読と POST によるメッセージ送信すべての双方向トラフィックを単一の統合 URL で処理します
通信パターンサーバーからクライアントへの一方向イベントプッシュのみリクエストとストリームを組み合わせた完全な双方向通信に対応します
接続の信頼性セッションが頻繁に失われ、複雑なエンドポイント間の状態管理が必要ですセッションを自動的に復旧し、多数の同時リモート接続向けに最適化されています
公式仕様の状況レガシー互換実装であり、新規デプロイには推奨されませんリモートネットワーク統合向けの現行公式 MCP 標準です

統一グローバルレスポンス仕様

すべての MCP ツールは、実行成功時と実行時の失敗時の両方で、同一のトップレベル JSON ラッパー構造を使用します。各ツールのビジネスペイロードは、ルートの res フィールド内にある info サブオブジェクトに格納されます。

コア構造の定義
{
  "res": {
    "success": boolean,
    "info": object
  }
}
  • success:グローバルな操作ステータスフラグ
    • true:ツールのロジックは例外なく実行され、info にツール固有の戻り値データが含まれます
    • false:操作に失敗しました(ワークスペース外へのアクセスのブロック、ファイルの欠落、IO エラー、無効な入力スキーマ、アクセス許可の拒否など)
  • info フィールドの二重の動作:
    1. 成功モード(success: true):各ツール固有のカスタム構造化ビジネスペイロード
    2. 失敗モード(success: false):機械可読なエラーコードと人間が読める説明を含む、固定された標準化エラーオブジェクト
      "info": {
        "code": "ERROR_CODE_IDENTIFIER",
        "message": "Detailed human-readable failure description"
      }
      
レスポンスの完全な例
1. 成功レスポンスのサンプル(fs_list_directory)
{
  "res": {
    "success": true,
    "info": {
      "paths": [
        "/tmp/tests/test_util.py",
        "/tmp/tests/__init__.py",
        "/tmp/tests/img/cochem_castle.jpg"
      ]
    }
  }
}
2. 失敗応答の例(ワークスペースパスの脱出制限)
{
  "res": {
    "success": false,
    "info": {
      "code": "WORKSPACE_ESCAPE_FORBIDDEN",
      "message": "Access restricted: Path `/tmp/test2` is outside allowed workspace `/tmp/tests`"
    }
  }
}

すべてのツールでワークスペースルートの分離が適用され、以下に記載された標準化済みの入出力スキーマ定義に完全に準拠しています。

MCP ツールの完全なリファレンス

すべてのツール入力スキーマでは、additionalProperties: false による厳格な検証が有効になっており、認識されないパラメーターを拒否して、悪意のあるパス注入の攻撃経路を防ぎます。

1. ディレクトリ操作ツール

fs_list_directory

説明:対象ディレクトリを再帰的または浅くスキャンし、ファイルタイプおよび拡張子によるフィルター設定に従って、絶対ファイルシステムパスのリストを返します。 パラメーター:

  • source_dir(string、必須):スキャンするルートディレクトリのパス
  • recursive(boolean、必須):すべてのサブディレクトリを完全に再帰して走査するかどうか
  • only_files(boolean、必須):出力を通常ファイルのみに絞り、ディレクトリを除外するかどうか
  • file_extension(string、任意、デフォルト=""):指定した拡張子のファイルに結果を絞る 成功応答ペイロード:
{
  "res": {
    "success": true,
    "info": {
      "paths": ["/absolute/path/file1.txt", "/absolute/path/file2.py"]
    }
  }
}
fs_copy_directory

説明:既存の対象ディレクトリに対する上書き動作を設定して、ディレクトリツリー全体を再帰的にコピーします。 パラメーター:

  • source_dir(string、必須):コピー元のディレクトリツリーのパス
  • copy_dest_dir(string、必須):出力先ディレクトリのパス
  • overwrite(boolean、任意、デフォルト=false):既存の出力先ディレクトリの内容を消去して上書きするかどうか 成功応答ペイロード:
{
  "res": {
    "success": true,
    "info": {}
  }
}
fs_move_directory

説明:ディレクトリツリー全体を新しい対象パスにアトミックに移動します。誤ってデータを失わないよう、上書きが明示的に有効化されていない限り、移動先が存在する場合は直ちに失敗します。 パラメーター:

  • source_dir(string、必須):移動元ディレクトリのパス
  • dest_dir(string、必須):移動先ディレクトリのパス
  • overwrite(boolean、任意、デフォルト=false):競合する移動先ディレクトリの上書きを許可するかどうか 成功応答ペイロード:成功フラグを含む空のinfoオブジェクトラッパー。

2. 単一ファイルの基本操作ツール

fs_create_file

説明:新しいテキストファイルを作成します。不足している親ディレクトリを自動的に生成し、テキストエンコーディングと初期ファイル内容を設定できます。 パラメーター:

  • file_path(string、必須):対象ファイルの絶対パス
  • content(string、任意、デフォルト=""):新しいファイルに書き込む初期テキスト内容
  • charset(string、任意、デフォルト="utf-8"):テキストエンコーディングの列挙値(以下の文字セット一覧を参照) 対応する文字セットの列挙値: utf-8、utf-16、latin-1、iso-8859-1、cp1252、Windows-1252、gbk、gb2312、shift_jis、euc_jp、euc_kr 成功応答ペイロード:成功フラグを含む空のinfoオブジェクトラッパー。
fs_delete_file

説明:通常の単一ファイルのみを完全に削除します。ディレクトリパスの入力は拒否し、大規模な再帰削除のリスクを防ぎます。 パラメーター:

  • file_path(string、必須):対象となる通常ファイルの絶対パス 成功応答ペイロード:成功フラグを含む空のinfoオブジェクトラッパー。
fs_copy_file

説明:元のファイルシステムメタデータを保持して単一ファイルをコピーします。競合する対象ファイルを上書きするかどうかを設定できます。 パラメーター:

  • source_file_path(string、必須):コピー元ファイルの絶対パス
  • dest_file_path(string、必須):出力先ファイルの絶対パス
  • overwrite(boolean、任意、デフォルト=false):既存の出力先ファイルを上書きするかどうか 成功応答ペイロード:成功フラグを含む空のinfoオブジェクトラッパー。
fs_move_file

説明:単一のファイルを新しい絶対パスへアトミックに移動します。移動先のファイルと競合する場合の上書き動作を設定できます。 パラメーター:

  • source_file_path(string、必須):移動元ファイルの絶対パス
  • dest_file_path(string、必須):移動先ファイルの絶対パス
  • overwrite(boolean、任意、デフォルト=false):移動先で競合するファイルの上書きを許可します 成功レスポンスのペイロード:成功フラグを含む空のinfoオブジェクトのラッパーです。
fs_get_file_info

説明:ファイルまたはディレクトリの完全なメタデータを取得します。整合性検証用に、SHA-256 暗号学的ダイジェストを任意で計算できます。 パラメーター:

  • file_path(string、必須):対象となるファイルシステムエントリーの絶対パス
  • calc_digest(boolean、任意、デフォルト=false):ファイル内容の SHA-256 ハッシュを計算します 成功レスポンスのペイロード:
{
  "res": {
    "success": true,
    "info": {
      "absolute_path": "C:\\Users\\zhigu\\Documents\\My Games\\fsext-mcp-server\\pyproject.toml",
      "is_readable": true,
      "is_writable": true,
      "size": 1672,
      "is_regular_file": true,
      "is_directory": false,
      "is_symbolic_link": false,
      "creation_millis": 1782288135574.7114,
      "last_modified_millis": 1782279393020.1187,
      "last_access_millis": 1782644004556.3462,
      "sha256_digest": "59614cf5f8ecff38de37637f1d5b6f607d885bd277815786f5ce4bb2ee5b73a6"
    }
  }
}
fs_is_file_exists

説明:完全なメタデータを読み込まずに、ファイルまたはディレクトリを含むファイルシステムエントリーの存在を軽量に確認します。 パラメーター:

  • file_path(string、必須):確認対象の絶対パス 成功レスポンスのペイロード:
{
  "res": {
    "success": true,
    "info": {
      "exists": true
    }
  }
}

3. ファイルの読み書きツール

fs_read_full_text

説明:ユーザーが指定したテキストエンコーディングで、対象ファイルのテキスト内容全体を読み取ります。 パラメーター:

  • file_path(string、必須):対象テキストファイルの絶対パス
  • charset(string、任意、デフォルト="utf-8"):テキストエンコーディングの列挙値 成功レスポンスのペイロード:
{
  "res": {
    "success": true,
    "info": {
      "content": "complete-text-file-content-here"
    }
  }
}
fs_read_text_range

説明:大きなファイルに適した、分割テキスト読み取りのストリーミング処理です。メモリーの過負荷を防ぐため、先頭の行をスキップし、読み取る行数の上限を指定できます。 パラメーター:

  • file_path(string、必須):対象テキストファイルの絶対パス
  • lines_to_skip(integer、必須、最小値=0):読み取り時にスキップする先頭行数
  • max_lines_to_read(integer、必須、最小値=0):ファイルから抽出する行数の上限
  • line_separator(string、任意、デフォルト="\n"):改行の区切り文字
  • charset(string、任意、デフォルト="utf-8"):テキストエンコーディングの列挙値 成功レスポンスのペイロード:
{
  "res": {
    "success": true,
    "info": {
      "lines_count": 5,
      "content": "segmented-text-content-block"
    }
  }
}
fs_read_binary_chunk

説明:バイナリファイルをチャンク単位でストリーミング読み取りします。ネットワーク経由の JSON-RPC 送信に適した Base64 エンコード済みバイトペイロードを返し、ストリーム終端マーカーを検出します。 パラメーター:

  • file_path(string、必須):対象バイナリファイルの絶対パス
  • bytes_to_skip(integer、必須、最小値=0):チャンクを読み取る前にスキップする先頭バイト数
  • max_bytes_to_read(integer、必須、最小値=0):1 つのチャンクで読み取るバイト数の上限 成功レスポンスのペイロード:
{
  "res": {
    "success": true,
    "info": {
      "data_base64": "base64-encoded-binary-byte-data",
      "raw_bytes_length": 5,
      "end_of_stream": true
    }
  }
}
fs_write_text

説明:UTF または複数のエンコーディングに対応したテキスト内容を対象ファイルに書き込みます。ファイル全体の上書きと追記のみの書き込みモードをサポートします。 パラメーター:

  • file_path(string、必須):出力ファイルの絶対パス
  • text(string、必須、最小長=1):保存する生のテキスト内容
  • append(boolean、任意、デフォルト=false):追記モードのフラグ(false = ファイル全体を上書き)
  • charset(string、任意、デフォルト="utf-8"):テキストエンコーディングの列挙値 成功レスポンスのペイロード:成功フラグを含む空のinfoオブジェクトのラッパーです。
fs_write_binary

説明:Base64 エンコードされたバイナリペイロードをデコードし、生のバイトデータを対象ファイルに書き込みます。複数チャンクのバイナリアップロード用に追記モードをサポートします。 パラメーター:

  • file_path(string、必須):出力ファイルの絶対パス
  • base64_data(string、必須、最小長=1):Base64 エンコードされた生のバイナリバイトペイロード
  • append(boolean、任意、デフォルト=false):バイナリデータをファイル末尾に追記します(false = 上書き) 成功レスポンスのペイロード:成功フラグを含む空のinfoオブジェクトのラッパーです。

4. コンテンツ検索とインプレース置換ツール

fs_search_files_by_content

説明:ディレクトリツリーを再帰的にスキャンし、対象のテキストパターンに一致する内容を含むすべてのファイルの絶対パスを返します。正規表現による検索、大文字と小文字を区別しない検索、ファイル拡張子による絞り込みに対応しています。 パラメーター:

  • dir_path (string, required):コンテンツを再帰的にスキャンするルートディレクトリ
  • recursive (boolean, required):すべてのサブディレクトリを再帰的に検索するかどうか
  • search_term (string, required):プレーンテキストのキーワードまたは正規表現パターン
  • is_regex (boolean, optional, default=false):true の場合、search_term を正規表現パターンとして扱います
  • ignore_case (boolean, optional, default=true):大文字と小文字を区別せずにパターンを照合します
  • file_extension (string, optional, default=""):拡張子のサフィックスでスキャン対象ファイルを絞り込みます
  • charset (string, optional, default="utf-8"):ファイル解析に使用するテキストエンコーディングの列挙値
fs_search_in_files_by_content

説明:複数ディレクトリのコンテンツを一括で照合し、一致した内容の前後に表示するコンテキスト行数を指定可能な、構造化された検索結果を返します。また、結果数の全体上限も設定できます。 パラメーター:

  • dir_path (string, required):スキャンするルートディレクトリの絶対パス
  • recursive (boolean, required):すべてのサブディレクトリを再帰的に検索するかどうか
  • search_term (string, required):検索キーワードまたは正規表現パターン
  • limit (integer, required):返す一致項目の合計数の厳密な上限
  • is_regex (boolean, optional, default=false):正規表現による検索を有効にします
  • ignore_case (boolean, optional, default=true):大文字と小文字を区別した検索を無効にします
  • lines_before (integer, optional, default=0):一致した各行の前に表示するコンテキスト行数
  • lines_after (integer, optional, default=0):一致した各行の後に表示するコンテキスト行数
  • file_extension (string, optional, default=""):拡張子のサフィックスでスキャン対象ファイルを絞り込みます
  • charset (string, optional, default="utf-8"):ファイル解析に使用するテキストエンコーディングの列挙値 成功時のレスポンスペイロード:
{
  "res": {
    "success": true,
    "info": {
      "results": [
        {
          "file_path": "/absolute/path/source.py",
          "start_line": 1,
          "end_line": 1,
          "text": "full-matched-line-content-with-context"
        }
      ]
    }
  }
}
fs_search_in_file_by_content

説明:単一ファイルを対象に精密なコンテンツ検索を行い、コードやドキュメントの調査ワークフローで使えるよう、一致箇所の前後に表示するコンテキスト行数を指定可能な構造化セグメントを返します。 パラメーター:

  • file_path (string, required):対象ファイルの絶対パス
  • search_term (string, required):検索キーワードまたは正規表現パターン
  • is_regex (boolean, optional, default=false):正規表現による検索を有効にします
  • ignore_case (boolean, optional, default=true):大文字と小文字を区別しない検索の切り替え
  • lines_before (integer, optional, default=0):一致箇所ごとに前に表示するコンテキスト行数
  • lines_after (integer, optional, default=0):一致箇所ごとに後に表示するコンテキスト行数
  • charset (string, optional, default="utf-8"):ファイル解析に使用するテキストエンコーディングの列挙値 成功時のレスポンスペイロード:複数ファイル検索の出力形式と同じ、一致した行のオブジェクトを含む構造化配列です。
fs_file_replace

説明:対象の単一ファイル内でテキストを一括置換し、書き込み後に一致して置換されたテキストセグメントの合計数を返します。 パラメーター:

  • file_path (string, required):編集対象ファイルの絶対パス
  • search_term (string, required):検索して置換するテキスト部分文字列
  • replacement (string, required):新しい置換テキストの内容
  • line_separator (string, optional, default="\n"):ファイル解析に使用する改行区切り文字 成功時のレスポンスペイロード:
{
  "res": {
    "success": true,
    "info": {
      "count": 1
    }
  }
}

5. 画像処理ツール

fs_image_resize

説明:アスペクト比の維持と、目標解像度に正確に合わせるためのキャンバスのパディングをネイティブにサポートし、ソース画像を指定した幅・高さにリサイズします。 パラメーター:

  • source_path(string、必須):入力元画像の絶対パス
  • dest_path(string、必須):リサイズ後の出力画像の絶対パス
  • width(integer、必須、exclusiveMinimum=0):目標ピクセル幅
  • height(integer、必須、exclusiveMinimum=0):目標ピクセル高さ
  • keep_aspect_ratio(boolean、任意、デフォルト=true):拡大縮小時に元画像のアスペクト比を維持します
  • pad_to_target(boolean、任意、デフォルト=true):アスペクト比を維持する場合、目標の幅・高さに正確に合わせるため透明なパディングを追加します 成功レスポンスのペイロード:成功フラグを含む空の info オブジェクトラッパー。
fs_image_crop

説明:ソース画像から矩形のピクセル領域を切り出し、独立した出力画像ファイルとして書き出します。 パラメーター:

  • source_path(string、必須):入力元画像の絶対パス
  • dest_path(string、必須):切り抜き後の出力画像の絶対パス
  • x(integer、必須、minimum=0):切り抜き領域の左端のピクセル座標
  • y(integer、必須、minimum=0):切り抜き領域の上端のピクセル座標
  • width(integer、必須、exclusiveMinimum=0):切り抜く矩形領域のピクセル幅
  • height(integer、必須、exclusiveMinimum=0):切り抜く矩形領域のピクセル高さ 成功レスポンスのペイロード:成功フラグを含む空の info オブジェクトラッパー。
fs_image_rotate

説明:ソース画像を任意の浮動小数点の角度で時計回りに回転します。端が切れないよう、画像全体を保持できるように出力キャンバスの寸法を自動的に拡張します。 パラメーター:

  • source_path(string、必須):入力元画像の絶対パス
  • dest_path(string、必須):回転後の出力画像の絶対パス
  • degrees(number、必須):時計回りの回転角度(度) 成功レスポンスのペイロード:成功フラグを含む空の info オブジェクトラッパー。

6. OCR テキスト抽出ツール

fs_ocr_extract_text

説明:ローカルにインストールされた Tesseract OCR バイナリを介して、ラスター画像ファイルから人が読めるテキストを抽出します。WASM JavaScript による代替実装はありません。tesseract_bin_path 引数が空の場合、別のウェブベース OCR エンジンは初期化されません。 パラメーター:

  • image_path(string、必須):テキスト認識対象の入力画像の絶対パス
  • tesseract_bin_path(string、任意、デフォルト=""):ローカルの Tesseract 実行可能バイナリの絶対パス。空の場合はシステム PATH の検索のみを使用します
  • tessdata_path(string、任意、デフォルト=""):Tesseract の言語学習データファイルを含むディレクトリの絶対パス
  • lang(string、任意、デフォルト="eng"):利用可能な tessdata 学習ファイルに対応する言語コードの接頭辞 成功レスポンスのペイロード:
{
  "res": {
    "success": true,
    "info": {
      "content": "full-ocr-extracted-text-from-input-image"
    }
  }
}

プロジェクトのビルドと開発用スクリプト

ソースリポジトリのコントリビューター向けに標準化された、npm 相当の uv 開発用スクリプト:

# Clean compiled build artifacts and temporary output directories
uv run -m scripts.clean

# Compile source code and type validation
uv run -m scripts.build

# Watch source files for incremental development rebuilds
uv run -m scripts.dev

# Full rebuild pipeline: clean artifacts + full source compilation
uv run -m scripts.rebuild

# Launch remote SSE transport server instance
uv run -m scripts.server

# FastMCP interactive development mode
uv run -m scripts.fastmcp

# MCP Inspector debug connection launcher
uv run -m scripts.inspect

# Execute full test suite with compiled test artifacts
uv run -m scripts.test

コアランタイム依存関係

  • fastmcp:公式 Python MCP サーバーランタイムフレームワーク
  • Pillow:リサイズ、切り抜き、回転処理のためのクロスプラットフォーム画像処理バックエンド
  • tesseract:ローカル Tesseract OCR バイナリ用のネイティブ Python バインディング
  • chardet:複数の文字エンコーディングに対応したテキストファイル検出
  • iconv-lite equivalent backends:クロスプラットフォームのテキストエンコーディング変換ユーティリティ
  • cors:HTTP/SSE リモートトランスポートサーバー用の CORS ミドルウェア
  • minimist equivalent CLI parser:起動フラグ用のコマンドライン引数パーサー
  • pydantic:すべての MCP ツール入力スキーマの厳密な型検証
  • uvicorn / starlette:リモートトランスポートのデプロイ向け ASGI HTTP サーバーランタイム

ライセンス

このプロジェクトは Apache License 2.0 の下でオープンソース化されています。ライセンスの法的条件の全文については、プロジェクトルートディレクトリにある LICENSE ファイルを参照してください。

サードパーティコンポーネントのライセンス

このプロジェクトには、chardet、Pillow、python-magic、Tesseract バインディングなど、複数のオープンソース依存ライブラリが組み込まれています。すべてのサードパーティライブラリには、それぞれの元のオープンソースライセンス契約および著作権表示が適用されます。

重要:この配布物には FFmpeg のバイナリアーティファクトは含まれていません。メディア処理拡張機能を外部で有効にする場合、エンドユーザーは FFmpeg の公式ライセンス条項を別途遵守する必要があります。

リポジトリと課題管理

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。