A newer version of the Gradio SDK is available:
5.30.0
Gradio MCP の サンプルリポジトリ: gradio-mcp-codex-template
OS: posix
Directory: /root/prj/gradio-mcp-codex-template
├── .github/
│ └── workflows/
│ └── sync-to-hf.yml
├── .env.example
├── .SourceSageignore
├── app.py
├── gMaL.md
├── README.md
└── requirements.txt
📂 Gitリポジトリ情報
🌐 基本情報
- 🔗 リモートURL: https://github.com/Sunwood-ai-labs/gradio-mcp-codex-template.git
- 🌿 デフォルトブランチ: main
- 🎯 現在のブランチ: main
- 📅 作成日時: 2025-05-07 13:02:45
- 📈 総コミット数: 1
🔄 最新のコミット
- 📝 メッセージ: Initial commit
- 🔍 ハッシュ: 1fe9b6d7
- 👤 作者: Maki ([email protected])
- ⏰ 日時: 2025-05-07 12:58:07
👥 主要コントリビューター
👤 名前 | 📊 コミット数 |
---|---|
Maki | 1 |
📊 プロジェクト統計
- 📅 作成日時: 2025-05-07 13:06:43
- 📁 総ディレクトリ数: 2
- 📄 総ファイル数: 7
- 📏 最大深度: 2
- 📦 最大ディレクトリ: (9 エントリ)
📊 ファイルサイズと行数
ファイル | サイズ | 行数 | 言語 |
---|---|---|---|
README.md | 4.5 KB | 138 | markdown |
app.py | 2.5 KB | 107 | python |
.SourceSageignore | 691.0 B | 54 | plaintext |
.github/workflows/sync-to-hf.yml | 605.0 B | 22 | yaml |
.env.example | 347.0 B | 12 | plaintext |
requirements.txt | 154.0 B | 6 | plaintext |
gMaL.md | 0.0 B | 0 | markdown |
合計 | 339 |
📈 言語別統計
言語 | ファイル数 | 総行数 | 合計サイズ |
---|---|---|---|
markdown | 2 | 138 | 4.5 KB |
python | 1 | 107 | 2.5 KB |
plaintext | 3 | 72 | 1.2 KB |
yaml | 1 | 22 | 605.0 B |
.SourceSageignore
サイズ: 691.0 B | 行数: 54 行
# バージョン管理システム関連
.git/
.gitignore
# キャッシュファイル
__pycache__/
.pytest_cache/
**/__pycache__/**
*.pyc
# ビルド・配布関連
build/
dist/
*.egg-info/
# 一時ファイル・出力
output/
output.md
test_output/
.SourceSageAssets/
.SourceSageAssetsDemo/
# アセット
*.png
*.svg
*.jpg
*.jepg
assets/
# その他
LICENSE
example/
package-lock.json
.DS_Store
# 特定のディレクトリを除外
tests/temp/
docs/drafts/
# パターンの例外(除外対象から除外)
!docs/important.md
!.github/workflows/
repository_summary.md
# Terraform関連
.terraform
*.terraform.lock.hcl
*.backup
*.tfstate
# Python仮想環境
venv
.venv
.env.example
サイズ: 347.0 B | 行数: 12 行
### .env.example
# 環境変数のサンプルファイル
# OpenAI APIキー
OPENAI_API_KEY=your_openai_api_key
# GitHub APIトークン(省略可: GitHub Actionsでは自動で提供されます)
GITHUB_TOKEN=your_github_token
# Codex挙動の設定
# 静粛モード: 1 に設定すると余分なログ出力を抑制
CODEX_QUIET_MODE=1
README.md
サイズ: 4.5 KB | 行数: 138 行 ```markdown
title: Gradio MCP Minimal emoji: 🌍 colorFrom: blue colorTo: blue sdk: gradio sdk_version: 5.26.0 app_file: app.py pinned: false
✨ 概要
このリポジトリは 最小構成 で Gradio アプリを立ち上げ、同時に MCP (Model Context Protocol) サーバー として機能させるサンプルです。
たった 1 つのファイルを実行するだけで、Web UI と MCP SSE エンドポイントの両方が手に入ります。
📄 ファイル構成
ファイル / ディレクトリ | 役割 |
---|---|
app.py |
Gradio UI + MCP サーバー(letter_counter ツール) |
requirements.txt |
依存パッケージ(gradio[mcp] のみ) |
assets/header.svg |
README 用ヘッダー画像(任意) |
📦 セットアップ
🚀 uv を使ったクイックスタート(推奨)
# 仮想環境の作成
uv venv
# 仮想環境の有効化
source .venv/bin/activate
# 依存インストール
uv pip install -r requirements.txt
🐍 標準 pip のみで実行したい場合
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
🚀 実行
以下のコマンドを実行でローカルサーバーが起動します。
python app.py
- Web UI: http://127.0.0.1:7860
- MCP SSE エンドポイント: http://127.0.0.1:7860/gradio_api/mcp/sse
- UI フッター → View API → MCP をクリックすると、コピペ可能な設定 JSON が表示されます。
⚙️ MCP クライアント設定例
Claude Desktop / Cline などで claude_desktop_config.json
等に追記:
{
"mcpServers": {
"gradio-local": {
"url": "http://127.0.0.1:7860/gradio_api/mcp/sse"
}
}
}
クライアントを再起動すると letter_counter
ツールが利用できるようになります 🎉
🔧 仕組み
demo.launch(mcp_server=True)
この 1 行で Gradio アプリが SSE ベースの MCP サーバーとして動作します。
ドキュストリングと型ヒントから自動でスキーマが生成されます。
🌠 拡張方法
app.py
に関数を追加し、適切なドキュストリングを記述Interface(...)
へ登録(または Blocks を使用)- 再起動すれば新しい MCP ツールとして自動公開
🛫 🤗 Spaces へ無料デプロイ
ファイル一式を Hugging Face Spaces (Gradio テンプレート) へプッシュすると、無料の公開 MCP サーバーになります:
https://<your-space>.hf.space/gradio_api/mcp/sse
例)https://makiai-gradio-mcp-minimal.hf.space/gradio_api/mcp/sse
🔗 MCP クライアント設定例 (Spaces)
Spaces で公開したサーバーを MCP クライアント(Claude Desktop / Cline など) から呼び出す手順です。
エンドポイント URL
https://<your-space>.hf.space/gradio_api/mcp/sse
例)
https://makiai-gradio-mcp-minimal.hf.space/gradio_api/mcp/sse
config 追記例 (
claude_desktop_config.json
等){ "mcpServers": { "gradio-space": { // 任意の名前 "url": "https://makiai-gradio-mcp-minimal.hf.space/gradio_api/mcp/sse" } } }
動作確認 クライアントを再起動 → Tool Palette で
server = gradio-space
を選択 →letter_counter
ツールにtext: "hello"
を送信し、length: 5
が返れば接続完了です 🎉
📝 ライセンス
MIT
`app.py`
**サイズ**: 2.5 KB | **行数**: 107 行
```python
import numpy as np
import gradio as gr
import qrcode
from PIL import Image
import io # Added for parity with user-provided snippet (currently unused)
def reverse_text(text):
"""
テキストを反転する。
Args:
text (str): 反転したいテキスト。
Returns:
str: 反転されたテキスト。
"""
return text[::-1]
def generate_qr_code(text):
"""
テキストからQRコードを生成する。
Args:
text (str): QRコードに埋め込むテキスト。
Returns:
numpy.ndarray: 生成されたQRコード画像 (RGB)。
"""
qr = qrcode.QRCode(version=5, box_size=10, border=5)
qr.add_data(text)
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
# PILイメージをNumPy配列に変換
img_array = np.array(img.convert("RGB"))
return img_array
def count_words(text):
"""
テキストの単語数をカウントする。
Args:
text (str): カウントしたいテキスト。
Returns:
int: 単語数。
"""
if not text.strip():
return 0
return len(text.split())
def resize_image(image, width, height):
"""
画像をリサイズする。
Args:
image (numpy.ndarray): リサイズしたい画像。
width (int): 新しい幅。
height (int): 新しい高さ。
Returns:
numpy.ndarray: リサイズされた画像 (RGB)。
"""
# NumPy配列からPILイメージに変換
pil_image = Image.fromarray(image)
resized_image = pil_image.resize((int(width), int(height)))
return np.array(resized_image)
# --- Interface -----------------------------------------------------------
resize_interface = gr.Interface(
fn=resize_image,
inputs=[
gr.Image(),
gr.Number(label="幅", value=300),
gr.Number(label="高さ", value=300),
],
outputs=gr.Image(),
api_name="resize_image",
)
demo = gr.TabbedInterface(
[
gr.Interface(reverse_text, gr.Textbox(), gr.Textbox(), api_name="reverse_text"),
gr.Interface(generate_qr_code, gr.Textbox(), gr.Image(), api_name="generate_qr_code"),
gr.Interface(count_words, gr.Textbox(), gr.Number(), api_name="count_words"),
resize_interface,
],
[
"テキスト反転",
"QRコード生成",
"単語数カウント",
"画像リサイズ",
],
)
if __name__ == "__main__":
# mcp_server=True starts the SSE endpoint at /gradio_api/mcp/sse
demo.launch(mcp_server=True)
gMaL.md
サイズ: 0.0 B | 行数: 0 行
(Empty file)
requirements.txt
サイズ: 154.0 B | 行数: 6 行
gradio
numpy
qrcode[pil]
pillow
mcp
https://gradio-pypi-previews.s3.amazonaws.com/3b5cace94781b90993b596a83fb39fd1584d68ee/gradio-5.26.0-py3-none-any.whl
.github/workflows/sync-to-hf.yml
サイズ: 605.0 B | 行数: 22 行
name: Sync to Hugging Face hub
on:
push:
branches: [main]
# to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
sync-to-hub:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
lfs: true
- name: Push to hub
env:
HF_TOKEN: ${{ secrets.HF_TOKEN }}
run: |
git fetch https://MakiAi:[email protected]/spaces/MakiAi/gradio-mcp-template main || true
git push --force https://MakiAi:[email protected]/spaces/MakiAi/gradio-mcp-template main