Fsext Mcp Server Python について
Fsext Mcp Server Pythonは、エージェントやMCPクライアント向けのローカルファイルシステム用MCPサーバーです。ファイル操作に加え、画像処理、OCR、検索を備え、指定したワークスペース内に操作を制限できます。
主な機能
- 01ファイルとディレクトリの管理
- 02テキストとバイナリのストリーム入出力
- 03再帰検索と置換
- 04画像のリサイズ、切り抜き、回転
- 05TesseractによるOCR
- 06ワークスペースルートの分離
活用シーン
- 01ワークスペース内のファイル管理
- 02複数ファイルのテキスト検索と置換
- 03後続タスク向けの画像処理
- 04画像からのテキスト抽出
MCP 対応
ファイルシステム、画像、OCR、検索の操作をMCPツールとして提供します。stdio、SSE、Streamable HTTPに対応し、操作対象を指定ルート内に制限できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
22掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| recursive | boolean | はい | |
| only_files | boolean | はい | |
| source_dir | string | はい | |
| file_extension | any | いいえ |
詳細
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 フラグによる柔軟なワークスペースルート分離設定に対応しています。
起動パラメーターのリファレンス表
| パラメーター | デフォルト値 | 説明 |
|---|---|---|
--transport | stdio | MCP トランスポートの種類:stdio / sse / http |
--host | 127.0.0.1 | ネットワークのバインドアドレス(stdio トランスポートでは無視されます) |
--port | 8000 | サービスのバインドポート(stdio トランスポートでは無視されます) |
--lock-root | None | すべてのファイルシステム操作をこのルートディレクトリ内に制限します。省略すると、制限なしでアクセスできます |
本番環境でよく使われる起動コマンド
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
アクセスエンドポイント
- SSE の長時間接続ストリーム購読チャネル(サーバーイベントのプッシュ):
http://<host>:<port>/sse - クライアントの 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フィールドの二重の動作:- 成功モード(
success: true):各ツール固有のカスタム構造化ビジネスペイロード - 失敗モード(
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 の公式ライセンス条項を別途遵守する必要があります。
リポジトリと課題管理
- GitHub ソースリポジトリ:https://github.com/kurtzhi/fsext-mcp-server-python
- バグ報告と機能リクエスト:https://github.com/kurtzhi/fsext-mcp-server-python/issues
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。