Featured

Deploy OpenClaw in 60 seconds — 20% off logoDeploy OpenClaw in 60 seconds — 20% off

Launch OpenClaw on Hostinger in about 60 seconds and keep your agent live 24/7. Our referral link gives you 20% off, no coupon code needed.

Launch on Hostinger
Run your Hermes agent on Hostinger, fully managed logoRun your Hermes agent on Hostinger, fully managed

Launch Hermes on Hostinger in one click, fully managed, no VPS knowledge needed. Use code ZACAARON10 for 10% off.

Launch on Hostinger
Crawl and scrape any site into clean data, 10% off logoCrawl and scrape any site into clean data, 10% off

Firecrawl crawls and scrapes any site into clean markdown for your agent. Get 1,000 free credits, and new users get 10% off their first purchase.

Try Firecrawl free
6,000+ web scrapers for your AI agent, start free logo6,000+ web scrapers for your AI agent, start free

Apify gives your agent live web data: 6,000+ prebuilt scrapers and actors, MCP-ready. Sign up free with $5 in usage credits.

Try Apify free
One API to scrape, enrich, and extract the internet. logoOne API to scrape, enrich, and extract the internet.

Context.dev gives your agents a single API to scrape, enrich, and extract live web data — no proxies, no parsers, no maintenance.

Start building free
SetupClaw: done-for-you OpenClaw for founders & exec teams logoSetupClaw: done-for-you OpenClaw for founders & exec teams

White-glove OpenClaw for founders and exec teams (4–50+ employees): we install, harden, integrate your tools, and maintain it — secured from day one.

Get it set up for you
SEO data APIs for your agent, $1 free credit logoSEO data APIs for your agent, $1 free credit

DataForSEO gives your agent live access to SERP results, keyword data, backlinks, and on-page SEO data through one API. New accounts get a $1 credit, good for up to 20,000 keyword or backlink lookups.

Try DataForSEO free
Reach 48,000+ AI builders

A flat monthly placement in front of developers actively installing AI tools. No lock-in, cancel anytime.

Advertise here

Works with

Claude CodeClaude DesktopCursorVS CodeClineCodex CLIOpenClaw+ any MCP client

Install to Claude Code

This server doesn't publish a one-line install command. Follow the setup in the source repository.

Summary

An MCP server with HTTP/stdio support, a web admin panel for managing services, capabilities, and user permissions with Bearer token authentication, enabling relay and access control for MCP tools.

README.md

MCP Server with Flask and FastMCP

English | 日本語

HTTP/stdio 対応の MCP サーバー。API/MCP 中継機能とユーザー別権限管理を備えた Web 管理画面付き。

!AccelMCP 概念図

機能

  • MCP プロトコル対応: HTTP と stdio の両方をサポート
  • 中継機能: API および MCP サーバーへの中継
  • 権限管理: ユーザーごとの Tool 使用権限制御
  • Web 管理画面: サービス、Capability、ユーザーの管理
  • Bearer トークン認証: ユーザー別のトークン発行

コンテナ構成

AccelMCP は次のコンテナで構成されます(webmcp は同一イメージ)。

  • caddy: リバースプロキシ / TLS(パスで webmcp に振り分け)
  • web: 管理画面 + REST API(起動時に DB マイグレーションを実行)
  • mcp: MCP エンドポイント(複数レプリカ / 別ホストにスケール可能)
  • redis: Streamable HTTP セッションの共有ストア
  • db: PostgreSQL

1台運用(全部入り)も複数台運用(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

アクセス

Docker Compose で起動した場合(推奨)

Caddy がリバースプロキシとして 443/80 番ポートを受け、web/mcp コンテナの 5000 番は ホストに公開されません。ポート番号なしの https:// でアクセスしてください。

  • Web 管理画面: https://localhost/
  • MCP サービス(サブドメイン方式): https://<identifier>.lvh.me/mcp

lvh.me は常に 127.0.0.1 を指す公開DNSなので、追加設定なしでサブドメインが使えます)

証明書は Caddy が自動生成する自己署名証明書(tls internal)です。ブラウザに 「この接続は保護されていません」という警告が出ますが、ローカル開発では想定どおりの動作です。 警告を消したい場合は スケーリング・コンテナ構成 の手順で Caddy のローカル CA をOSに信頼させてください。

  • デフォルト管理者
  • ID: accel
  • パスワード: universe

Docker を使わず python run.py で直接起動した場合

Flask 開発サーバーがそのままポート 5000 で起動するので、TLS なしでアクセスします。

  • Web 管理画面: http://localhost:5000/
  • MCP サービス(サブドメイン方式): http://<identifier>.lvh.me:5000/mcp

⚠️ セキュリティ警告

  • 本番環境では必ず認証情報を変更してください
  • 環境変数 ADMIN_USERNAMEADMIN_PASSWORD で上書き可能です
  • デフォルト認証情報はデモ・検証用です(Oracle の scott/tiger のような位置づけ)

環境変数での認証情報変更:

# 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 アドレスベースのレート制限機能を備えています:

  • デフォルト設定: 5 回の失敗で 30 分間ロック
  • ログ記録: 全ログイン試行(成功/失敗)を記録
  • 手動ロック解除: 管理画面から IP アドレスのロックを解除可能

監査ログ機能

すべての管理者操作が自動的に記録されます:

  • ログイン履歴: ユーザー名、IP アドレス、成功/失敗、タイムスタンプ
  • CRUD 操作履歴: MCP サービス、アプリ、Capability、アカウント、権限の作成・更新・削除
  • 変更差分: 操作前後の値を JSON 形式で記録
  • CSV エクスポート: 監査レポート用に CSV 出力可能

監査ログ 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 日)

管理画面構成

ログイン画面

  • 管理者認証

サービス管理

  • サービス一覧表示
  • サービス新規登録 (サブドメイン、共通ヘッダー設定)
  • サービス詳細/編集
  • Capability 管理

Capability 管理

  • Capability 一覧
  • Capability 登録 (API/MCP 選択、URL、ヘッダー、ボディ設定)
  • Capability 編集/削除

ユーザー管理

  • ユーザー一覧
  • ユーザー登録 (ログイン ID、パスワード)
  • ユーザー詳細 (Bearer トークン表示)
  • ユーザー情報編集/削除

MCP クライアント接続

以下は Docker Compose 起動時 (Caddy 経由、https://・ポート番号なし) のURLです。 Docker を使わず python run.py で直接起動した場合は http:// + :5000 を使ってください (例: http://myservice.lvh.me:5000/mcp)。自己署名証明書のため、curl には -k (証明書検証スキップ) が必要です。

サブドメインベースのアクセス (推奨)

1. Capabilities 取得 (GET リクエスト)

# 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"
  }
}

2. Tool 実行 (POST リクエスト)

# Tool を直接実行
curl -k -X POST \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"arguments": {"city": "Tokyo"}}' \
  https://myservice.lvh.me/tools/get_weather

# または MCP プロトコルで実行
curl -k -X POST \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "get_weather",
      "arguments": {"city": "Tokyo"}
    }
  }' \
  https://myservice.lvh.me/mcp

MCP クライアント設定

HTTP 接続 (Dify, Claude Desktop など)

{
  "mcpServers": {
    "my-service": {
      "url": "https://myservice.lvh.me/mcp",
      "transport": {
        "type": "http"
      },
      "headers": {
        "Authorization": "Bearer YOUR_TOKEN"
      }
    }
  }
}

Legacy エンドポイント (後方互換性)

{
  "mcpServers": {
    "my-service": {
      "url": "https://localhost/mcp/myservice",
      "headers": {
        "Authorization": "Bearer YOUR_TOKEN"
      }
    }
  }
}

stdio 接続

{
  "mcpServers": {
    "my-service": {
      "command": "docker",
      "args": [
        "exec",
        "-i",
        "mcp_server",
        "python",
        "stdio_server.py",
        "myservice",
        "YOUR_TOKEN"
      ]
    }
  }
}

エンドポイント一覧

MCP エンドポイント

| エンドポイント | メソッド | 説明 | | ------------------------------------ | -------- | --------------------------------------------- | | <subdomain>.lvh.me/mcp | GET | ユーザーが使用可能な Capabilities を取得 | | <subdomain>.lvh.me/mcp | POST | MCP リクエストを処理 (tools/list, tools/call) | | <subdomain>.lvh.me/tools/<tool_id> | POST | 特定の Tool を直接実行 | | /mcp/<subdomain> | POST | Legacy エンドポイント (後方互換性) |

注意: 上記は Docker Compose (Caddy経由) でのURLです(https://、ポート番号なし)。 python run.py で直接起動した場合は http://<subdomain>.lvh.me:5000/mcp のように ポート5000・httpを使ってください。lvh.me はローカル開発用のドメインで、常に 127.0.0.1 を指します。本番環境では独自ドメインを使用してください。

データベース構造

  • users: ユーザー情報、認証情報
  • services: 登録サービス (サブドメイン、共通ヘッダー)
  • capabilities: Tool 定義 (API/MCP、URL、ヘッダー、ボディ)
  • user_permissions: ユーザー ×Capability の権限マッピング
  • mcp_connection_logs: MCP 接続ログ(監査用)

接続ログ

標準出力への JSON 構造化ログ

AccelMCP は、すべての MCP 接続ログを標準出力(stdout)に JSON 形式で出力します。これにより、任意のコンテナログ収集システムで自動的にログを集約できます。

対応プラットフォーム:

  • AWS ECS/Fargate → CloudWatch Logs
  • Google Cloud Run → Cloud Logging
  • Azure Container Apps → Azure Monitor
  • Kubernetes → kubelet → Fluentd/Fluent Bit → 任意のバックエンド
  • Heroku → Logplex
  • その他、Docker コンテナをサポートするすべてのプラットフォーム

ログ形式例:

{
  "timestamp": "2026-01-08T12:34:56.789Z",
  "log_type": "mcp_connection",
  "level": "INFO",
  "mcp_method": "tools/call",
  "mcp_service_id": 7,
  "mcp_service_name": "OpenAI Service",
  "app_id": 43,
  "app_name": "ChatGPT API",
  "capability_id": 215,
  "capability_name": "generate_text",
  "tool_name": "generate_text",
  "account_id": null,
  "account_name": null,
  "status_code": 200,
  "is_success": true,
  "duration_ms": 1234,
  "ip_address": "192.168.1.1",
  "user_agent": "Claude/1.0",
  "access_control": "public",
  "request_id": "abc123",
  "error_code": null,
  "error_message": null,
  "request_body": "{\"prompt\":\"Hello\"}",
  "response_body": "{\"text\":\"Hi there!\"}"
}

環境変数設定

# 標準出力ログの有効/無効(デフォルト: true)
MCP_LOG_STDOUT=true

ログ無効化

開発環境でログ出力を無効にする場合:

MCP_LOG_STDOUT=false docker compose up

クラウドプラットフォームでの活用

AWS ECS/Fargate:

{
  "logConfiguration": {
    "logDriver": "awslogs",
    "options": {
      "awslogs-group": "/ecs/accel-mcp",
      "awslogs-region": "ap-northeast-1",
      "awslogs-stream-prefix": "mcp"
    }
  }
}

CloudWatch Insights で検索:

fields @timestamp, mcp_method, tool_name, duration_ms, is_success
| filter log_type = "mcp_connection"
| filter is_success = false
| sort @timestamp desc

Google Cloud Run:

自動的に Cloud Logging に送信され、jsonPayloadフィールドでフィルタリング可能:

jsonPayload.log_type="mcp_connection"
jsonPayload.is_success=false

Kubernetes (Fluent Bit):

[FILTER]
    Name parser
    Match *
    Key_Name log
    Parser json

[FILTER]
    Name modify
    Match *
    Condition Key_value_matches log_type mcp_connection
    Add k8s_label_app accel-mcp

開発

# ローカルで開発
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate
pip install -r requirements.txt
python app.py

コード品質チェック

プロジェクトでは Ruff (リンター・フォーマッター) と mypy (型チェッカー) を使用しています。

すべてのチェックを実行:

./run_check.sh

このスクリプトは以下を実行します:

  • Ruff によるコードスタイルチェック
  • Ruff によるフォーマットチェック
  • mypy による型チェック

自動修正とフォーマット:

./run_format.sh

このスクリプトは以下を実行します:

  • Ruff による自動修正
  • Ruff によるコードフォーマット(自動整形)

個別実行:

# Ruff リンター
ruff check app/ tests/

# Ruff フォーマッター(チェックのみ)
ruff format app/ tests/ --check

# Ruff フォーマッター(実行)
ruff format app/ tests/

# mypy 型チェック
mypy app/

# 自動修正
ruff check app/ tests/ --fix

設定ファイル:

  • pyproject.toml - Ruff と mypy の設定

注意: check.shformat.shrun_check.shrun_format.sh にリネームされています。

ドキュメント

詳細なドキュメントは docs/ ディレクトリにあります。

| ドキュメント | 説明 | | ---------------------------------------------------------------------------------------- | ---------------------------------------------------- | | クイックスタート / English | 5 分で MCP サーバーを起動・テストする最短手順 | | セットアップガイド / English | 詳細なセットアップ・起動手順 | | MCP エンドポイント詳細 / English | 各 MCP エンドポイントの詳細な使用方法 | | ディレクトリ構造 / English | MVC パターンに基づくプロジェクト構成の説明 | | テストガイド / English | ユニットテスト・統合テストの実行方法と構成 | | E2E テスト / English | Playwright を使った E2E テストの実行方法 | | データベースマイグレーション / English | Flask-Migrate (Alembic) を使ったマイグレーション管理 | | スケーリング・コンテナ構成 / English | コンテナ構成、1台/複数台運用、Redis セッション共有、MCP エンドポイントのスケール |

このプロジェクトについて

このプロジェクトは 100% バイブコーディング(vibe coding) で作成されています。 コードはすべて AI とのペアプログラミングによって実装されました。

使用モデル:

  • Claude Sonnet 4.5 / 4.6
  • Claude Opus 4.8

See related servers & alternatives →

Related MCP servers

Browse all →

Related guides

Hand-picked reading to help you choose and use Other servers.