celesto
Secure and persistent computer for AI agents
HTTP/stdio compatible MCP hub server with API/MCP relay and Web admin interface
Developer toolsPython · JavaScriptGitHub @t-ogawa-devOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
MCP Development Server
Translation pending
Loading the full README.
Read the full README ↗English | 日本語
HTTP/stdio 対応の MCP サーバー。API/MCP 中継機能とユーザー別権限管理を備えた Web 管理画面付き。
| 仕様バージョン | 対応状況 |
|---|---|
2026-07-28 (最新) | ✅ 対応済み — ステートレスリクエスト、server/discover |
2024-11-05 (旧) | ✅ 後方互換として継続サポート |
initialize ハンドシェイクや Mcp-Session-Id なしで tools/list / tools/call などを直接呼び出せます。server/discover: セッション不要のケーパビリティ検出エンドポイント。protocolVersions: ["2026-07-28", "2024-11-05"] を返します。Mcp-Session-Id を送る旧仕様クライアントの initialize → セッションフローは引き続き動作します。不正なセッション ID を送った場合のみ 400 を返します。Octopus MCP Proxy は次のコンテナで構成されます(web と mcp は同一イメージ)。
caddy: リバースプロキシ / TLS(パスで web と mcp に振り分け)web: 管理画面 + REST API(起動時に DB マイグレーションを実行)mcp: MCP エンドポイント(複数レプリカ / 別ホストにスケール可能)redis: 旧仕様の Streamable HTTP セッションの共有ストアdb: PostgreSQL1台運用(全部入り)も複数台運用(WEB/MCP/Redis を別サーバに分散)も同じ compose 定義で動きます。
旧仕様の MCP セッションは REDIS_URL があれば Redis で共有され、未設定ならプロセス内メモリにフォールバックします。
詳細は スケーリング・コンテナ構成 を参照してください。
# Docker Composeで起動
docker compose up -d
# ログ確認
docker compose logs -f
# 停止
docker compose down
開発環境では Flask 開発サーバーが起動し、コード変更時に自動リロードされます。
# Gunicornで起動
FLASK_ENV=production docker compose up -d
または .env ファイルで設定:
FLASK_ENV=production
本番環境では Gunicorn が起動し、マルチプロセスで安定した動作を提供します。
環境変数 LOG_LEVEL でログレベルを制御できます:
# DEBUGレベルで起動(詳細なログを出力)
LOG_LEVEL=DEBUG docker compose up -d
# INFOレベル(デフォルト)
LOG_LEVEL=INFO docker compose up -d
利用可能なログレベル:
DEBUG: 詳細なデバッグ情報INFO: 一般的な情報メッセージ(デフォルト)WARNING: 警告メッセージERROR: エラーメッセージCRITICAL: 重大なエラー.env ファイルで設定することも可能:
LOG_LEVEL=DEBUG
Caddy がリバースプロキシとして 443/80 番ポートを受け、web/mcp コンテナの 5000 番は
ホストに公開されません。ポート番号なしの https:// でアクセスしてください。
<identifier>.lvh.me/mcp
(lvh.me は常に 127.0.0.1 を指す公開DNSなので、追加設定なしでサブドメインが使えます)証明書は Caddy が自動生成する自己署名証明書(tls internal)です。ブラウザに
「この接続は保護されていません」という警告が出ますが、ローカル開発では想定どおりの動作です。
警告を消したい場合は スケーリング・コンテナ構成 の手順で
Caddy のローカル CA をOSに信頼させてください。
adminadminpython run.py で直接起動した場合Flask 開発サーバーがそのままポート 5000 で起動するので、TLS なしでアクセスします。
<identifier>.lvh.me:5000/mcp⚠️ セキュリティ警告
ADMIN_USERNAME と ADMIN_PASSWORD で上書き可能です環境変数での認証情報変更:
# docker-compose.yml または .env
environment:
ADMIN_USERNAME: your_secure_username
ADMIN_PASSWORD: your_secure_password
注意: 管理画面はパス(/dashboard 等)で振り分けられるため、https://localhost/ ・
https://lvh.me/ ・https://admin.lvh.me/ のどのホスト名でアクセスしても同じ管理画面が
表示されます。MCP サービス側だけが、サブドメイン(<identifier>.lvh.me)で対象サービスを
区別します。
管理画面ログインは IP アドレスベースのレート制限機能を備えています:
すべての管理者操作が自動的に記録されます:
監査ログ API:
GET /api/admin/login-logs - ログイン履歴取得GET /api/admin/login-logs/export - ログイン履歴 CSV 出力GET /api/admin/action-logs - 操作履歴取得GET /api/admin/action-logs/export - 操作履歴 CSV 出力POST /api/admin/unlock-account - IP ロック解除GET /api/admin/locked-ips - ロック中 IP 一覧AdminSettings で以下の設定をカスタマイズ可能:
login_max_attempts: ログイン試行上限(デフォルト: 5)login_lock_duration_minutes: ロック時間(デフォルト: 30 分)audit_log_retention_days: 監査ログ保持期間(デフォルト: 365 日)以下は Docker Compose 起動時 (Caddy 経由、https://・ポート番号なし) のURLです。
Docker を使わず python run.py で直接起動した場合は http:// + :5000 を使ってください
(例: http://myservice.lvh.me:5000/mcp)。自己署名証明書のため、curl には -k
(証明書検証スキップ) が必要です。
# lvh.me ドメインを使用 (ローカル開発用、常に127.0.0.1を指す)
curl -k -H "Authorization: Bearer YOUR_TOKEN" \
https://myservice.lvh.me/mcp
# または subdomain パラメータを使用
curl -k -H "Authorization: Bearer YOUR_TOKEN" \
https://localhost/mcp?subdomain=myservice
レスポンス例:
{
"capabilities": {
"tools": [
{
"name": "get_weather",
"description": "Get current weather information",
"inputSchema": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "Parameter: city"
}
}
}
}
]
},
"serverInfo": {
"name": "Weather Service",
"version": "1.0.0"
}
}
This is the beginning of the README. Read the rest at the original. Read the full README ↗