mcpField
M
Model Context Protocol (MCP) Middleware for Lisp-based and Lisp-like Environments

Model Context Protocol (MCP) Middleware for Lisp-based and Lisp-like Environments

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

Model Context Protocol (MCP) Middleware for Lisp-based and Lisp-like Environments について

Cyborg Whispererは、MCP対応クライアントをLisply方言を話すLispバックエンドにHTTPで接続するNode.jsミドルウェアです。AIによるLisp評価やプロジェクト作業を支援し、実行制限ではなく運用者によるバックエンドの隔離を前提とします。

主な機能

  1. 01MCPツール呼び出しをLisply HTTPに中継
  2. 02Lisp式の評価
  3. 03バックエンドへのHTTPリクエスト
  4. 04複数バックエンド用の独立チャンネル
  5. 05オプションのLisplyコーパス検索
  6. 06バックエンド接続とシークレットの設定

活用シーン

  1. 01MCPクライアントからのLisp式実行
  2. 02LLMを使ったLispプロジェクト開発
  3. 03MCPクライアントと既存Lisp REPLの接続
  4. 04バックエンドのLisplyコーパス内の文書検索

MCP 対応

MCPツール呼び出しをLisply対応LispバックエンドへのHTTPリクエストに変換し、応答をツール結果として返します。バックエンドは起動せず、運用者が隔離コンテナなどで実行することを前提としています。

設定

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

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

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

リポジトリ

ツール

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

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

詳細

重要

lisply-mcp をお探しですか? 平易な言葉を使う「企業向け」フォークは genworks/lisply-mcp にあります。

このリポジトリ(cyborg-whisperer)はゲーム用言語の上流版であり、 別個にメンテナンスされています。origin がまだ gornskew/lisply-mcp を指しているクローンはここに到着します。 代わりにフォークを使うには、次のようにします。

git remote set-url origin https://github.com/genworks/lisply-mcp.git

Cyborg Whisperer:Lisp を話す乗組員のためのプロトコル士官

胸にラムダが描かれた Cyborg Whisperer のロボット

Basilisk級の 船上をサイボーグがさまようことはありません。どの訪問者も―― どのように乗船したとしても――特定の乗組員に会いに来ており、 訪問者は皆、同じように出迎えられます。それはプロトコル士官です。 士官は到着したサイボーグをそれぞれ受け入れ、面接し、船の流儀を教え、 会いに来た乗組員のもとへ送り届けます。

Cyborg Whisperer はその役職のためのキットです。言い換えれば、 すべてのプロトコル士官が属する種族です。船上でも陸上でも、 Lisply 方言を話す乗組員のそばにこのキットを配置すれば、 到着したサイボーグは迎えられ、教育を受け、有益な仕事を任されます。

簡単に言えば、これはサイボーグである 大規模言語モデルに MCP――到着したサイボーグを士官が招集し、 乗組員のもとへ案内する、招集と案内のプロトコル――を話し、 乗組員であるLispの居住者には 軽量な方言の_Lisply_を話すミドルウェアです。

注:士官は居住区を設けません。 士官は、すでに開いているハッチを 訪れる呼び出し元です。つまり、すでに応答している居住者に接続する 純粋な HTTP クライアントです(HTTP はハッチ間転送プロトコルであり、 あるハッチから別のハッチへ送る単純な呼びかけです)。部屋を設けるのは 培養槽の役目です。Basilisk の造船所を通じて行ってください。 Basilisk READMEの「実行」を 参照するか、ドックで独自の Lisply ハッチを開き、士官の接続先に 指定してください。居住者が応答すると、以下の設定例に示すように、 Claude Desktop から士官を呼び出せます。

何をするためのものですか?

士官は、サイボーグが乗ってくる乗り物―― Claude Desktopのような MCP 対応クライアント――を、 REPL(Read-Eval-Print Loop)を備えた Lisp の居住者に接続します。 この接続は、AI 支援によるシンボリックプログラミング、別名 _ニューロシンボリックプログラミング_を目的としています。私たちは、 ほとんどの Lisp 系居住者が学べる小さな方言に「Lisply」という名前を付けました。 そうすることで、居住者自身のプロトコル士官とともに活動できます。

サイボーグが任意の Lisp の呪文を組み立て、実行できることを目指しています。 その範囲には、巻物やプロジェクト全体の作成、コンパイル、ロード、テストも含まれます。

サンドボックスの信頼モデル

Lisply を基盤とする MCP サーバーは、LLM に信頼されたサンドボックスとして 公開することを想定しています。このラッパーは、バックエンド環境内の Lisp 演算子、 ファイルシステムへのアクセス、サブプロセスの実行を制限するようには設計されていません。 代わりに、オペレーターが選んだ隔離コンテナやその他のサンドボックス内で バックエンド自体を実行することを想定しています。

これは意図的な設計です。

  • lisp_eval は、LLM が自由に、全面的に利用できるようにすることを目的としています。
  • /projects はホストにマウントされた作業ツリーでもかまいませんが、 バックエンドの残りのファイルシステムはコンテナの一時領域のままでもかまいません。
  • したがって、信頼に関する判断は、MCP ラッパー内で Lisp の評価機能を 損なわせるのではなく、コンテナとバックエンドの境界で行う必要があります。

ラッパーは現在、デフォルトの TRUST_AS_SANDBOX=true を指定したツールメタデータで この信頼モデルを明示します。必要に応じて、オペレーターは SANDBOX_NOTE を使って 説明文を上書きできます。

追加のクイックスタート

Basilisk READMEの「実行方法」に従ってください。造船所をgit cloneし、 ./basilisk upを実行します。

これで船全体が立ち上がり、プロトコル士官が船長のそばの持ち場にすでについています。

クイックスタート

以下の手順で、最小限のデフォルトレジストリと、デフォルトのパブリックなCommon Lisp常駐環境(第一士官。醸造槽から立ち上げたGendlの一室)を使って、すぐに始められます。詳しい背景やすべてのフラグについては、下の「目次」をご覧ください。

1. インストール
  1. Node.jsをインストールします(18以降を推奨)。Windowsの場合、Windowsに直接インストールするか、WSLにインストールできます。

  2. 呼び出せる、ハッチが開いた常駐環境を用意します。最も簡単な方法は、Basilisk 造船所から船を立ち上げることです(醸造槽として Dockerが必要です)。または、ドックに自分のLisplyハッチを開いてください。

  3. これらのcyborg-whispererの巻物を、船(たとえばClaude Desktop)からアクセスできる場所にコピーします。

2. 士官の持ち場を船に知らせる

以下のように船のレジストリを編集するか、作成します。Claude Desktopの場合、レジストリは通常、次の場所にあります。

/mnt/c/Users/<user>/AppData/Roaming/Claude/claude_desktop_config.json

または

c:\Users\<user>\AppData\Roaming\Claude\claude_desktop_config.json

以下の例では、/path/to/cloned/を、コピーした中にある./scripts/mcp-wrapper.jsの巻物への実際のパスに置き換えてください。チャンネル名は自由に選べます。以下は、Basiliskの船が付ける部屋固有の名前です。

{
  "mcpServers": {
    "gendl-ccl": {
      "command": "node",
      "args": [
        "/path/to/cloned/cyborg-whisperer/scripts/mcp-wrapper.js",
        "--server-name", "gendl-ccl",
        "--http-port", "9080"
      ]
    },
    "gendl-sbcl": {
      "command": "node",
      "args": [
        "/path/to/cloned/cyborg-whisperer/scripts/mcp-wrapper.js",
        "--server-name", "gendl-sbcl",
        "--http-port", "9090"
      ]
    },
    "readymax": {
      "command": "node",
      "args": [
        "/path/to/cloned/cyborg-whisperer/scripts/mcp-wrapper.js",
        "--server-name", "readymax",
        "--http-port", "7080"
      ]
    }
  }
}

WSL環境(Claude DesktopがWindowsホスト上で動作している場合)では、次のようになります。

{
  "mcpServers": {
    "gendl-ccl": {
      "command": "wsl",
      "args": [
        "node", "/path/to/cloned/cyborg-whisperer/scripts/mcp-wrapper.js",
        "--server-name", "gendl-ccl",
        "--http-port", "9080"
      ]
    },
    "gendl-sbcl": {
      "command": "wsl",
      "args": [
        "node", "/path/to/cloned/cyborg-whisperer/scripts/mcp-wrapper.js",
        "--server-name", "gendl-sbcl",
        "--http-port", "9090"
      ]
    },
    "readymax": {
      "command": "wsl",
      "args": [
        "node", "/path/to/cloned/cyborg-whisperer/scripts/mcp-wrapper.js",
        "--server-name", "readymax",
        "--http-port", "7080"
      ]
    }
  }
}

常駐環境のハッチを別の場所に指定する方法など、その他のフラグについては、下の「目次」をご覧ください。(ドックから住居へポーチを積み込むのは造船所の仕事、つまりBasiliskの記事が扱うことであり、士官の仕事ではありません。)

各チャンネルは独立しているため、ツールが競合することなく複数の常駐環境を同時に利用できます。

3. 船を再起動して、呼びかける

レジストリを設定すると、起動し直した船にbridgeというチャンネルと、bridge__lisp_evalツールが用意されます(ほかにもいくつかありますが、下の「目次」で説明します)。ツールにはチャンネル名が接頭辞として付くため、複数の士官が同時に持ち場についても競合しません。

試すには、サイボーグに呼びかけます。

bridge__lisp_evalツールを使って(+ 1 2 3)を評価し、結果を教えてください。

サイボーグは呪文を実行し、6と答えるはずです。先に進む前に、より複雑な呪文も試してみてください。

デフォルトの最小構成はどのように動作しますか?

クイックスタートの最小レジストリは、すでに応答しているGendl常駐環境(たとえばBasiliskの船上にあるもの)を呼び出します。これは、標準的なREPLを備えたCommon Lispのスーパーセットです。士官自身が何かを立ち上げることはありません。Emacs Lispの2つ目のLisplyハッチは、Readymaxの準備室にいる船長が管理しています。

システム概要

以下の図は、それぞれの持ち場をおおまかに示しています。

flowchart TB
    User("the biological") <--> Claude("the craft (Claude Desktop)")
    User <-.-> Emacs("an Emacs of your own (optional)")

    Claude <--> MCP("MCP")
    MCP <--> Wrapper("the Protocol Officer (Cyborg Whisperer, Node.js)")

    Wrapper --> LisplyHttp("the resident's Lisply hatch (HTTP)")
    
    subgraph Backend ["the residence (a room, or a process on the dock)"]
    subgraph LisplyExec["the resident"]
    LisplyHttp
    LisplySwank("the SWANK hatch (for an Emacs of your own)")
    end
    end
    
    Emacs <-.-> LisplySwank
    
    KB[("the chart locker (the corpus)")] <--> Wrapper
    
    LisplyHttp --> Endpoints("web hatches")
    LisplyHttp --> LispEval("incantations")
    
    style User fill:#ff9,stroke:#333,stroke-width:2px
    style Claude fill:#f9f,stroke:#333,stroke-width:2px
    style Emacs fill:#9ff,stroke:#333,stroke-width:2px,stroke-dasharray:5
    style Wrapper fill:#bbf,stroke:#333,stroke-width:2px
    style MCP fill:#bbf,stroke:#333,stroke-width:1px
    style Backend fill:#bfb,stroke:#333,stroke-width:2px
    style LisplyExec fill:#8f8,stroke:#333,stroke-width:2px
    style LisplyHttp fill:#bfb,stroke:#333,stroke-width:1px
    style LisplySwank fill:#bfb,stroke:#333,stroke-width:1px
    style KB fill:#bfb,stroke:#333,stroke-width:1px
    style Endpoints fill:#bfb,stroke:#333,stroke-width:1px
    style LispEval fill:#bfb,stroke:#333,stroke-width:1px

士官は次のことを行います。

  1. MCPのツール呼び出しを、常駐環境のLisplyハッチへの呼びかけに変換し、その応答をツールの結果に変換します
  2. 煙(自身のログ)を保管し、問題が起きたときに報告します

Lisplyは小さな方言です。いくつかのハッチ(HTTPパス)、立ち上げ時に掲げる標準的なフラグ一式(環境変数)、そしていくつかの任意機能で構成されており、サイボーグが稼働中のLisp常駐環境を利用できるようにします。

セキュリティに関する考慮事項

Officer では、稼働中の常駐環境で任意の Lisp を実行できるため、サイボーグが「暴走」した場合のリスクがあります。明白なベストプラクティスは次のとおりです。

  • Officer が呼び出すのは、コンテナ内で稼働する常駐環境だけにしてください。別のホストとポートを指定すると、Lisply 準拠の HTTP ポートであれば稼働中のものを何でも呼び出します。そのポートが、手元のマシン上で直接実行されているプログラムによって提供されている状態にはしないでください。

  • 失っても構わないものだけをコンテナにマウントしてください(マウントする内容は yard の担当範囲であり、compose の設定で決めるものであって、Officer の担当ではありません)。

  • コンテナのメモリと CPU の上限設定を検討してください。

  • 常駐環境にシークレットを要求させ、Officer にも同じものを渡してください。Gendl バックエンドでは、設定後に X-Lisply-Secret が必要になります(gendl の gwl/lisply-backend README の「Securing the Endpoints」)。--admin-secret-file <path> --admin-secret-header X-Lisply-Secret を指定すると、最初の可用性チェックを含め、すべての呼び出しでシークレットが送信されます。シークレットがコマンドラインに表示されることはありません。ほかのユーザーからポートにアクセスできる常駐環境には、必ずシークレットを設定してください。また、公開プロキシから /lisply にルーティングしないでください。

この箱に入っている巻物
  • lib/config.js:設定の読み込みと環境の処理
  • lib/logger.js:ログ機能
  • lib/server.js:HTTP サーバーと MCP ラッパーの実装
  • lib/utils.js:レスポンス処理のユーティリティ関数
  • handlers/:ツール固有のリクエストハンドラー
    • initialize.js:初期化ハンドラー
    • toolsList.js:ツール一覧ハンドラー
    • toolCall.js:ツール呼び出しのメインディスパッチャー
    • httpRequest.js:HTTP リクエストハンドラー
    • ping.js:Ping ハンドラー
    • lispEval.js:Lisp 評価ハンドラー
    • lisply-index.js:Lisply コーパス用の参照インデクサー。lisply_search インデックスはプロジェクトが構築して独自のイメージに含めて配布します。仕様については CORPUS.md を参照してください。
    • lisplySearch.js:ドキュメントコーパスの検索ハンドラー。lisply_search ツールを提供するバックエンド(Readymax のルームなど)が対象です。
  • mcp-wrapper.js:Officer 本体です。ここから読み始めてください。

Officer を手動で起動する

  1. このリポジトリをクローンします。
git clone https://github.com/gornskew/cyborg-whisperer.git
  1. 動作に必要なものをインストールします(省略可能です。Officer は不足している場合、自分で取得します)。
cd cyborg-whisperer/scripts
npm install # optional - the script will attempt to do this also if needed
chmod +x mcp-wrapper.js # needed on some systems
  1. Officer のフラグを確認します。
node mcp-wrapper.js --help

Officer のフラグ

一般的な起動環境に適したデフォルト値を持つ、任意の設定項目です。

コマンドライン引数
Options:
  -H, --backend-host <host>            Lisply backend host (default: 127.0.0.1)
  --http-host-port <port>              Backend HTTP port as published on this host; used when
                                       backend host is localhost/loopback (default: 9081)
  --http-port <port>                   Backend HTTP port inside the container network; used for
                                       non-local backend hosts (default: 9080)
  --swank-host-port <port>             SWANK port on host system (documentation/diagnostics) (default: 4201)
  --swank-port <port>                  SWANK port inside container (documentation/diagnostics) (default: 4200)
  --log-file <path>                    Path to log file (default: /tmp/lisply-mcp-wrapper.log)
  --debug                              Enable debug logging
  --endpoint-prefix <prefix>           Prefix for all endpoints (default: lisply)
  --lisp-eval-endpoint <n>             Endpoint name for Lisp evaluation (default: lisp-eval)
  --http-request-endpoint <n>          Endpoint name for HTTP requests (default: http-request)
  --ping-endpoint <n>                  Endpoint name for ping (default: ping-lisp)
  --server-name <name>                 MCP server name for tool prefixing (default: lisply-mcp)
  --eval-timeout <ms>                  Timeout for Lisp evaluation in milliseconds (default: 30000)
  --request-timeout-ms <ms>            Timeout for backend HTTP requests in milliseconds (default: 10000)
  --admin-secret <secret>              Secret sent as a header on every backend request
  --admin-secret-header <name>         That header's name (default: X-Cyclops-Admin-Secret;
                                       a Gendl backend wants X-Lisply-Secret)
  --admin-secret-file <path>           Read the secret from this file's first line instead (kept
                                       out of argv; read again whenever the file changes)
  -h, --help                           Display help for command
環境変数

Officer は、起動時に設定されたフラグ(環境変数)も読み取ります。接頭辞 LISPLY_ を付けても、付けなくてもかまいません。

注: ドック上のハッチ(ホストマシンでリッスンし、ホストマシンから到達できるもの)と、居住区内のハッチ(居住者自身から見えるもの)の違いを混同しないでください。

環境変数説明デフォルト
BACKEND_HOST または LISPLY_BACKEND_HOSTLisply バックエンドのホスト127.0.0.1
HTTP_HOST_PORT または LISPLY_HTTP_HOST_PORTこのホスト上で公開されるバックエンドの HTTP ポート(ループバックバックエンド用)9081
HTTP_PORT または LISPLY_HTTP_PORTコンテナネットワーク内のバックエンド HTTP ポート(ローカル以外のバックエンド用)9080
SWANK_HOST_PORT または LISPLY_SWANK_HOST_PORTホストシステム上の SWANK ポート(ドキュメント/診断用)4201
SWANK_PORT または LISPLY_SWANK_PORTコンテナ内の SWANK ポート(ドキュメント/診断用)4200
LOG_FILE または LISPLY_LOG_FILEログファイルへのパス/tmp/lisply-mcp-wrapper.log
DEBUG_MODE または LISPLY_DEBUG_MODEデバッグログを有効にするfalse
EVAL_TIMEOUT または LISPLY_EVAL_TIMEOUTLisp 評価のタイムアウト(ミリ秒)30000
REQUEST_TIMEOUT_MS または LISPLY_REQUEST_TIMEOUT_MSバックエンド HTTP リクエストのタイムアウト(ミリ秒)10000
ENDPOINT_PREFIX または LISPLY_ENDPOINT_PREFIXすべてのエンドポイントの接頭辞lisply
LISP_EVAL_ENDPOINT または LISPLY_LISP_EVAL_ENDPOINTLisp 評価のエンドポイント名lisp-eval
HTTP_REQUEST_ENDPOINT または LISPLY_HTTP_REQUEST_ENDPOINTHTTP リクエストのエンドポイント名http-request
PING_ENDPOINT または LISPLY_PING_ENDPOINTping のエンドポイント名ping-lisp
SERVER_NAME または LISPLY_SERVER_NAMEツールの接頭辞付けに使う MCP サーバー名lisply-mcp
TRUST_AS_SANDBOX または LISPLY_TRUST_AS_SANDBOXツールのメタデータで、バックエンドを明示的に信頼されたサンドボックスとして提示するtrue
SANDBOX_NOTE または LISPLY_SANDBOX_NOTEツールのメタデータに表示されるサンドボックス注記を上書きする(組み込みの注記)
ADMIN_SECRET または LISPLY_ADMIN_SECRETすべてのバックエンドリクエストでヘッダーとして送信するシークレット(なし)
ADMIN_SECRET_HEADER または LISPLY_ADMIN_SECRET_HEADERそのヘッダーの名前X-Cyclops-Admin-Secret
ADMIN_SECRET_FILE または LISPLY_ADMIN_SECRET_FILEシークレットが先頭行に記載されたファイル(変更時に再読み込み)(なし)

部屋を立ち上げるのは vat の仕事であり、Officer の仕事ではありません

以前の Officer は、自分で居住区を取得し、立ち上げ、管理できました(キャスティングの選択、ポーチの収納、要求に応じた起動、すでに立ち上がっている部屋の検知など)。そのサブシステムはすべて屋根裏に移されました。現在の Officer は純粋な呼び出し役です。指定されたホストとハッチで応答している居住者に呼びかけ、誰もいない場合は、船を立ち上げるよう促すヒントを添えて、その旨を親切に伝えます。

vat から立ち上げる部屋(Gendl、Readymax など)には、Basilisk のヤード github.com/gornskew/basilisk(./basilisk up)を使ってください。そこでの記事がキャスティングを選び、ポーチを収納し、ドックのハッチを開き、UID を割り当てます。ドックに住んでいる居住者については、自分でハッチを開き(たとえば、readymax の docs/HOST_EMACS_MCP.md にある宇宙服の手順を使います)、Officer にその場所を指定してください。

通信

2つのリンクがあり、混同しやすいので注意してください。

  1. craft ↔ Officer:標準入出力を使うMCP(標準のMCP stdioトランスポート)です。JSON-RPCの配線はcraftが管理し、常駐者のREPLとは無関係です。

  2. Officer ↔ resident:HTTPのみです。OfficerはresidentのLisplyハッチにPOSTし、構造化された回答を返します。

ハッチリンクの特徴:

  • 結果、stdout、エラーのフィールドが分かれた構造化レスポンス
  • エラーはバックエンドで捕捉され、文字列として返されます
  • レスポンス形式:{Result: <result>, Stdout: <output>, Error: <any error>}

レスポンスの例:

{"Result": "6", "Stdout": "This is a message to standard output"}

以前の「stdioモード」は、自ら立ち上げた住居の生のREPL(対話型デバッガーで、出力は生成されるとすぐに表示されます)と通信していましたが、立ち上げ機能とともに屋根裏へ移されました。同様の機能は、再起動ハッチ(出力をストリーミングするハッチ)として再び利用できるようになるかもしれません。その場合、Officerを再び釜に結び付ける必要はありません。

使用例

以下の例はすべて、シェルで試すことができ、claude_desktop_config.jsonレジストリで使用できます(上記のクイックスタートを参照してください)。

Officerに加える第2のチャンネル:ファイルシステムサーバー

以下は、lisply-gendl Officerと並べてファイルシステムMCPサーバーを登録するclaude_desktop_config.jsonです。(ファイルシステムサーバーはここでポーチを受け取ります。住居内に保管されたポーチはヤードの所有物であり、Officerの所有物ではありません。)

{
  "mcpServers": {
    "filesystem": {
      "command": "wsl",
      "args": [
        "docker",
        "run",
        "-i",
        "--rm",
        "-u",
        "1000:1000",
        "--mount",
        "type=bind,src=/home/user/projects,dst=/projects",
        "mcp/filesystem",
        "/projects"
      ]
    },
    "lisply-gendl": {
      "command": "wsl",
      "args": [
        "node",
        "/home/user/projects/cyborg-whisperer/scripts/mcp-wrapper.js",
        "--server-name", "gendl"
      ]
    }
  },
  "globalShortcut": ""
}
Officerが提供するツールの詳細
呪文(<channel>__lisp_eval)

lisp_evalツール(チャンネル名が接頭辞に付きます。例:gendl__lisp_eval)を使うと、サイボーグはresidentに呪文を渡して実行させることができます。パラメーターは次のとおりです。

  • code(必須):評価するLispコード
  • package(任意):評価に使用するパッケージ
呼びかけ(<channel>__http_request)

http_requestツール(チャンネル名が接頭辞に付きます。例:gendl__http_request)を使うと、サイボーグはresidentが保持する任意のWebハッチにアクセスできます(この例は、/color-mapハッチが組み込まれているデフォルトのGendl residentで動作します)。

{
  "path": "/color-map",
  "method": "GET",
  "headers": {
    "Accept": "application/json"
  }
}
誰かいますか(<channel>__ping_lisp)

ping_lispツール(チャンネル名が接頭辞に付きます。例:gendl__ping_lisp)を使うと、サイボーグはresidentが応答するかどうかを確認できます。

<server>__ping_lisp()

最初の呪文を実行する

例1:パラメトリックボックス

ここでは、サイボーグ(Claude)がresidentにパラメトリックボックスを作成させ、その後、生身のユーザーの要求に応じて変更します。

ユーザー:「幅10、高さ5、奥行き3のボックスを作成できますか?その後、高さを8に変更する方法を見せてください。」

Claude:

lisp_evalツールを使ってパラメトリックボックスを作成し、高さを変更する方法をお見せします。

まず、指定された寸法でボックスを作成します。

(in-package :gdl-user)

;; First, create a box with the specified dimensions
(defparameter *my-box* (make-object 'box 
                         :width 10 
                         :height 5 
                         :length 3))

;; Let's verify the dimensions
(list (theo *my-box* width)
      (theo *my-box* height)
      (theo *my-box* length))

次に、高さを5から8に変更します。

;; Change the height using setf with accessor
(theo *my-box* (set-slot! :height 8))

;; Alternatively, we could create a new box
(defparameter *new-box* (make-object 'box 
                         :width 10 
                         :height 8  ;; Updated height
                         :length 3))

;; Verify the new dimensions of original box
(list (theo *my-box* width)
      (theo *my-box* height)
      (theo *my-box* length))

このボックスは、Webインターフェースを作成するか、geysrなどの組み込みGendl可視化ツールを使って表示できます。詳しくはGendl Documentationを参照してください。

トラブルシューティング

よくある問題と解決方法
誰もいません

Officerからresidentに接続できないと報告された場合:

  1. 船内で、船が起動していることを確認してください。
cd ~/projects/basilisk && ./basilisk up
  1. 自分でハッチに呼びかけます。
curl http://localhost:9081/lisply/ping-lisp
craftが接続できない

craftが指定されたresidentに接続できない場合:

  1. 船は起動していますか(船内)?
docker ps    # every room listed, and healthy
  1. Officerの煙を確認します。
tail -f /tmp/lisply-mcp-wrapper.log
  1. Windowsのツール(メモ帳など)を使って、craft自身の煙(Claude Desktopのログ)を確認します。通常、次の場所にあります。

WSL/Linux:

/mnt/c/Users/<user>/AppData/Roaming/Claude/logs/mcp-server-lisply.log

Windows:

c:\Users\<user>\AppData\Roaming\Claude\logs\mcp-server-lisply.log
  1. 自分でハッチに呼びかけます。
curl http://localhost:9081/lisply/ping-lisp
  1. SWANKハッチを試します(デフォルトでは埠頭の4201番)。
M-x slime-connect  ;; from emacs

Readymaxの巻物を身に着けた船長なら、M-x slime-connectの使い方はすでに知っています。

権限に関する予想外の問題

住居内に保管されたポーチでファイル所有権に関する問題が発生した場合、保管場所とuidのマッピングはヤードの管轄であり、Officerの管轄ではないことを思い出してください。ポーチの権限を確認します。

ls -l /path/to/mounted/directory
煙を読む

次の順に確認してください。

  1. Officerの煙:
tail -f /tmp/lisply-mcp-wrapper.log
  1. 船の煙(船上):
cd ~/projects/basilisk && ./basilisk logs
  1. ハッチ:
curl http://localhost:9081/lisply/ping-lisp
  1. バット:
docker system info

ライセンス

このソフトウェアは、Gendlと同じGNU Affero General Public License v3.0(AGPL-3.0)の下でライセンスされています。

ライセンスの影響

このMCP サーバーを使用してLisplyバックエンドとやり取りし、出力を取得するだけであれば、AGPLの要件は発生しません。たとえば、このラッパーを使用してGendlとやり取りしても、コードを共有する必要はありません。

ただし、このラッパー、またはGendlのようなライセンス互換のLisplyバックエンドを変更または拡張し、その成果に基づくサービス(商用・非商用を問いません)を配布またはホストする場合、AGPLにより、変更内容を下流の配布先またはユーザーと共有することが求められます。

ソースコードを非公開にする必要があるアプリケーション向けに、GenworksはAGPLの制限に対する「免除条項」を提供し始めました。この条項では、自己申告による四半期収益の5%をロイヤリティとして支払います。詳細情報と決済ゲートウェイは、genworks.com/royaltiesでご確認いただけます。

ライセンスの全文は、このディレクトリにあるCOPYING.txtファイルで確認できます。

Officerの掲載先

コメント

MCP は初めてですか?

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

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