mcpField
🚀
🚀 MCPCFC - ColdFusion MCP Server

🚀 MCPCFC - ColdFusion MCP Server

ローカル
github.com/revsmoke開発ツール1438 週間前に更新

🚀 MCPCFC - ColdFusion MCP Server について

MCPCFCは、既存のCFML業務ロジックをAIアシスタントから呼び出せるようにするMCPサーバーです。サンプルツールを備え、HTTP接続とローカルクライアント向けのstdioブリッジに対応しています。

主な機能

  1. 01CFMLコンポーネントをMCPツール化
  2. 02ファイル、HTTP、PDF、データベース、メールのサンプルツール
  3. 03AbstractToolによるカスタムツール登録
  4. 04Streamable HTTPとstdioブリッジ
  5. 05入力検証と構造化結果

活用シーン

  1. 01既存のColdFusion業務ロジックをAIアシスタントに公開
  2. 02ColdFusionでのPDF生成や処理
  3. 03制限付きの読み取り専用データベース検索
  4. 04Claude DesktopをHTTPベースのサーバーに接続

MCP 対応

Streamable HTTP経由でColdFusionのツールをMCPクライアントに公開します。ブリッジにより、Claude Desktopなどのクライアント向けにstdioへ変換できます。

設定

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

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

MCPCFC — 世界初のColdFusion MCP サーバー

ColdFusionアプリがAIと連携できるようになりました。AIはCFツールを利用できます。

MCPCFCはAdobe ColdFusionをClaude、ChatGPT、Cursor、VS Codeなど、Model Context Protocolに対応するあらゆるAIアシスタントに接続します。既存のCFMLコードをAIから呼び出せるツールに変換します。書き換えは不要です。

請求書を作成するColdFusion関数がありますか?それがMCPツールになります。独自データベースを検索する関数も、ツールです。社内ワークフローを開始する関数も、ツールです。ColdFusionでできることなら、AIから呼び出せます。

┌─────────────┐      ┌──────────────┐      ┌──────────────────┐
│   Claude /   │─────▶│    MCPCFC     │─────▶│  Your CF App     │
│   ChatGPT /  │◀─────│  MCP Server   │◀─────│  & Business Logic│
│   Cursor     │      └──────────────┘      └──────────────────┘
└─────────────┘       JSON-RPC 2.0          PDF, Email, DB,
                      + Stdio Bridge        Files, HTTP, ...

これが重要な理由

政府機関、金融機関、医療システム、そして世界中の企業で、数百万行ものColdFusionコードが現在も本番環境で稼働しています。そのコードは機能しています。しかし、人々の働き方を変えつつあるAI搭載ツールから、ますます切り離されています。

MCPCFCはその隔たりを埋めます。CFのビジネスロジックをPythonやTypeScriptで書き直す代わりに、MCPツールとしてラップすれば、AIアシスタントから直接呼び出せます。レガシーコードベースが一夜にしてAIと接続された資産になります。

対象となる方:

  • エンタープライズチーム:長年にわたるCFビジネスロジックを活用しつつ、書き換えずにAI機能を導入したい方
  • 政府機関:レガシーCFシステムを段階的に近代化したい方
  • CF開発者:すでに機能しているものを基盤に、次世代のインテリジェントアプリケーションを構築したい方
  • デジタルトランスフォーメーションの責任者:レガシーから最先端技術へ、低リスクで移行する方法を探している方

含まれるもの

MCPCFCには、このパターンを実証する6つの概念実証ツールが含まれています。

ツール機能
helloシンプルな挨拶。接続の確認に便利です
fileOperationsサンドボックス化されたファイル入出力(read、write、list、delete、exists、info)
httpRequest外部へのHTTPリクエスト(プライベート/内部IPアドレスへのアクセスをブロックします)
pdfColdFusion内蔵のPDFエンジンを使って、PDFの生成、テキスト抽出、結合を行います
queryDatabase検証済みの読み取り専用SQLクエリ(SELECTのみ)
sendEmailSendGrid経由でメールを送信します(SENDGRID_API_KEYが必要です)

意図的にシンプルなツールです。真価は、独自のツールを追加することで発揮されます。詳しくは、以下のカスタムツールの追加をご覧ください。

テスト済みの環境

  • ✅ macOS + Adobe ColdFusion 2025
  • ⚠️ Windows/Linuxや他のCFMLエンジン(Lucee、BoxLangなど)ではまだテストされていません

クイックスタート

オプション1:ブラウザテストクライアント
  1. このリポジトリをColdFusionのウェブルートにクローンします(またはシンボリックリンクを作成します)。
  2. 次のURLにアクセスします:http://localhost:8500/mcpcfc/client-examples/test-client.cfm
  3. Connect → List Tools → Call Hello Toolの順にクリックします。
オプション2:Claude Desktop(ローカルstdio)

Claude Desktopはstdio経由でローカルのMCPサーバーと通信します。MCPCFCはHTTPベースのため、両者を変換するブリッジスクリプトが付属しています。

~/Library/Application Support/Claude/claude_desktop_config.json(macOS)を編集します。

{
  "mcpServers": {
    "coldfusion-mcp": {
      "command": "/absolute/path/to/mcpcfc/bridge/cf-mcp-bridge.sh",
      "env": {
        "MCPCFC_URL": "http://localhost:8500/mcpcfc"
      }
    }
  }
}

その後、Claude Desktopを完全に終了して再起動します。

オプション3:リモート/Streamable HTTP

MCPCFCは、次のエンドポイントであらゆるMCPクライアントからの直接HTTP接続にも対応しています。

BASE_URL/endpoints/mcp.cfm

Claude Code、ChatGPT、Codex、Cursor、VS Code、Zed、Kimi、Antigravityのコピー&ペースト用設定については、**CLIENTS.md**をご覧ください。

カスタムツールの追加

ここからMCPCFCを自分仕様にできます。各ツールはAbstractToolを継承するColdFusionコンポーネント(.cfc)です。基底クラスには入力検証、構造化結果のヘルパー、MCPプロトコルへの自動登録機能が備わっています。ビジネスロジックを記述すれば、MCPCFCが接続部分を処理します。

パターン

すべてのツールは次の3つの手順で作成します。

  1. AbstractToolを継承する.cfcファイルをcore/tools/に作成します
  2. init()でツールを定義します(名前、説明、入力スキーマ)
  3. MCPServer.cfcに1行追加して登録します

これだけです。完全な例を見ていきましょう。

例:WeatherTool の構築

外部 API 経由で天気を確認する機能を AI アシスタントに追加したいとします。ツール全体は次のとおりです。

ステップ 1 — core/tools/WeatherTool.cfc を作成します:

/**
 * WeatherTool.cfc
 * Returns current weather for a given city
 */
component extends="AbstractTool" output="false" {

    public function init() {
        // 1. Identity — how the tool appears in MCP
        setName("getWeather");
        setTitle("Get Weather");
        setDescription("Returns current weather conditions for a given city name.");

        // 2. Input schema — tells the AI what parameters to send
        var inputSchema = structNew("ordered");
        inputSchema["type"] = "object";
        inputSchema["properties"] = structNew("ordered");

        var citySchema = structNew("ordered");
        citySchema["type"] = "string";
        citySchema["description"] = "City name (e.g., 'Pittsburgh', 'New York')";
        inputSchema.properties["city"] = citySchema;

        inputSchema["required"] = ["city"];
        setInputSchema(inputSchema);

        return this;
    }

    public struct function execute(required struct toolArgs) {
        // Validate the required parameter exists
        validateRequired(arguments.toolArgs, ["city"]);

        var city = trim(arguments.toolArgs.city);
        logExecution("Weather requested", { city: city });

        try {
            // Call an external weather API
            var apiUrl = "https://wttr.in/#encodeForURL(city)#?format=j1";

            var httpService = new http(method="GET", url=apiUrl, timeout=10);
            var response = httpService.send().getPrefix();

            if (response.statusCode contains "200") {
                var data = deserializeJson(response.fileContent);
                var current = data.current_condition[1];

                var result = {
                    "city": city,
                    "temperature_f": current.temp_F,
                    "temperature_c": current.temp_C,
                    "condition": current.weatherDesc[1].value,
                    "humidity": current.humidity & "%",
                    "wind_mph": current.windspeedMiles
                };

                // Return structured JSON — the AI will interpret it
                return jsonResult(result);
            } else {
                return errorResult("Weather API returned status: #response.statusCode#");
            }
        } catch (any e) {
            return errorResult("Failed to fetch weather: #e.message#");
        }
    }
}

ステップ 2 — core/MCPServer.cfc に登録します:

core/MCPServer.cfc を開き、registerDefaultTools() メソッドの toolClasses 配列にツールクラスを追加します:

var toolClasses = [
    "core.tools.HelloTool",
    "core.tools.PDFTool",
    "core.tools.SendGridEmailTool",
    "core.tools.DatabaseTool",
    "core.tools.FileTool",
    "core.tools.HttpClientTool",
    "core.tools.WeatherTool"          // <-- add your tool here
];

ステップ 3 — 再起動してテストします:

ColdFusion アプリケーションを再起動し(restart-app.cfm にアクセスするか、CF サービスを再起動してください)、その後 MCP クライアントを再起動します。新しいツールがツール一覧に表示され、AI がすぐに呼び出せるようになります。

基底クラスが提供する機能

AbstractTool.cfc には、ビジネスロジックに専念できるよう、次のヘルパーメソッドが用意されています:

メソッド用途
textResult(string)プレーンテキストの応答を返します
jsonResult(data)構造化された JSON データを返します
errorResult(message)isError フラグ付きでエラーを返します
imageResult(base64Data, mimeType)Base64 エンコードされた画像を返します
resourceResult(uri, text, mimeType)埋め込み MCP リソースを返します
validateRequired(args, paramArray)必須パラメーターが欠けている場合に例外をスローします
validateTypes(args, typeMap)パラメーターの型(string、numeric、boolean、array、struct)を検証します
getParam(args, name, default)フォールバックのデフォルト値を指定してパラメーターを取得します
logExecution(message, data)(ロガーが設定されている場合)ツールの動作をログに記録します
実用的なツールのアイデア

このパターンを理解したら、組織で ColdFusion がすでに得意としていることを活用できないか考えてみましょう。

  • 請求書ジェネレーター — 既存の cfpdf レポート処理をラップします
  • 顧客検索 — CRM データベースをクエリし、結果を AI に返します
  • ドキュメント変換 — CF に組み込まれた Word/Excel/PDF 機能を活用します
  • メール作成 — 既存のメールインフラストラクチャを通じてメールを作成、送信します
  • レポート実行 — ストアドプロシージャを実行し、整形した結果を返します
  • ファイル処理 — アップロードされた CSV を解析し、データを変換して、出力を書き込みます
  • レガシー API ラッパー — SOAP サービスや社内 REST エンドポイントを AI に公開します

これらはどれも、単一の .cfc ファイルと登録用の 1 行で実現できます。

スモークテスト

Stdio(Claude Desktop 推奨)
MCPCFC_URL="http://localhost:8500/mcpcfc" ./scripts/verify-stdio.sh
Streamable HTTP(リモートクライアント向け)
MCPCFC_URL="http://localhost:8500/mcpcfc" ./scripts/verify-http.sh

設定

config/settings.cfm を編集して、次の項目をカスタマイズします:

  • protocolVersion(デフォルト:2025-06-18)
  • defaultDatasource(デフォルト:mcpcfc_ds)
  • ファイルサンドボックスのパスとサイズ制限
  • CORS 設定
データベースのセットアップ(任意)

queryDatabase ツールは、mcpcfc_ds という名前の ColdFusion データソースを想定しています:

  1. ColdFusion Administrator でデータソースを設定します
  2. ブラウザーで database-setup.cfm にアクセスしてサンプルスキーマを読み込むか、mcpcfc_db.sql を MySQL/MariaDB にインポートします

デバッグ

  • Claude Desktop の MCP ログ(macOS): ~/Library/Logs/Claude/mcp-server-coldfusion-mcp.log
  • ブリッジのデバッグモード: 設定の env ブロックで MCPCFC_DEBUG=1 を設定します
  • 自己署名 HTTPS: 信頼されていないローカル証明書を使用する場合は、MCPCFC_INSECURE=1 を設定します

セキュリティに関する警告

MCPCFC は強力なリモート制御機能を備えており、ファイルシステムへのアクセス、HTTP リクエストの送信、データベースのクエリ、メールの送信、ドキュメントの生成が可能です。次の対策を講じずに、一般公開しないでください:

  • 認証
  • 厳格な CORS/オリジン制限
  • レート制限
  • ツールごとの認可とサンドボックス化

プロジェクト構成

Application.cfc
bridge/
  cf-mcp-bridge.sh           # Stdio ⇄ HTTP bridge for Claude Desktop
client-examples/
  test-client.cfm             # Browser-based test interface
config/
  routes.cfm
  settings.cfm                # Server configuration
core/
  CapabilityManager.cfc
  JSONRPCHandler.cfc
  MCPServer.cfc                # Tool registration happens here
  TransportManager.cfc
  tools/
    AbstractTool.cfc           # Base class — extend this for custom tools
    DatabaseTool.cfc
    FileTool.cfc
    HelloTool.cfc              # Good reference for new tools
    HttpClientTool.cfc
    PDFTool.cfc
    SendGridEmailTool.cfc
endpoints/
  mcp.cfm                     # Unified MCP endpoint (JSON-RPC 2.0)
logging/
registry/
session/
scripts/
  verify-stdio.sh
  verify-http.sh

コントリビューション

ガイドラインについては、CONTRIBUTING.md をご覧ください。

ライセンス

MIT。詳細は LICENSE をご覧ください。


ColdFusion 2025 で @revsmoke が作成しました。コントリビューションを歓迎します。

コメント

MCP は初めてですか?

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

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