1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HSP3.7RC1で標準入出力型mcpサーバーを作ってみた

Posted at

概要

mcpサーバーにはローカルで動作するstdio型とネットワークごしにアクセスできるstreamable HTTP型がありますが
stdio型は標準入出力において改行で区切られたjsonメッセージのやり取りができれば実装可能です。
今回はHot Soup Processor 3.7 RC1で、Win11のローカルPCで動作するmcpサーバーを実装してみました。
たまねちゃんの挨拶を回答する機能を提供します。
引数に時刻の時を指定して時刻によって内容を変更できるようにします。

なお、ちゃんとしたデータチェックや親切なエラー情報、UTF-8入力対応などは今回は実装していません。

mcpホストとして Windows 11 Home の Visual Studio Code 1.100.3 を使用して動作したことがあります。

準備

HSP3のコード2ファイルとstart.axファイル

今回は .exe ファイルは作成せずにstart.axファイル作成からセッティングします。
C:/path/toフォルダにjson.hspmcpsrv.hspを作成し
HSP3エディタで下記のコードを入力し保存します。

mcpsrv.hspのタブでHSPエディタのGUIメニューから「HSP」→「START.AXファイル作成」を実行します。
これでC:/path/to/start.axファイルが作成されます。

vscode への設定

vscodeで適当なプロジェクトフォルダに.vscodeフォルダを作成し
その中にmcp.jsonファイルを作成します。

{
  "servers": {
    "tamane-server": {
      "type": "stdio",
      "command": "C:/hsp37/hsp3cl.exe",
      "args": ["C:/path/to/start.ax"]
    }
  }
}

args の第一引数にはC:/path/to/start.axを指定します。
vscode上では"tamene-server"上にボタンが追加されます。

tamane-server開始前
tama6.png
※1回実行済みだとキャッシュの表示が追加されます

開始 Start をクリックしてください。
mcpサーバーが正しく実装されていると以下のような状態になります。

tamane-server開始後
tama7.png
Runningに状態が変化したら成功です

vscodeのchatでの問い合わせ

vscodeの「Open Chat」でチャットを開きます。
Ask または Edit を エージェント Agent モードへ変更します。
ここで「たまねちゃんの昼の挨拶を教えて」と入力します。
実行確認が出ますので 続行 または Continue をクリックします。
さらに「たまねちゃんの深夜の挨拶」と入力すると
別な挨拶が返ってきます。

実行例1
tama1.png
Copilotが昼を適切に12時と読み替えてmcpサーバーに問い合わせをしようとします
実行例2
tama2.png
Ranの部分を展開するとmcpサーバーからの応答が Output または 出力 に表示されます
実行例3
tama3.png
深夜は2時
実行例4
tama4.png
12時とは異なる挨拶を返します

Running であっても mcpサーバーに問い合わせにいかない場合は
+ ボタンから New Chat として始めると
問い合わせにいくことがあります。

今回は挨拶だけ応答する tools を実装しましたが
目的に応じてローカルPCで実行する tools も実装できると思います。

start.axではなく .exe の実行形式を作成する場合は
commandに作成後の .exe ファイルのパスを指定します。
その場合には .exe ファイルと同一フォルダにhspinet.dllを配置する必要があります。

コードの解説

json.hspはHSP3でのjsonアクセスのヘルパー関数実装です。
hspinetから提供されている関数のままでは下へオブジェクトを潜っていくのが面倒だったのでドット表記で書けるようにしてあります。

mcpsrv.hspが実際の標準入出力とパース、応答作文などになります。

HSP3で標準入出力を扱うコンソールモードにするにはhsp3cl.asを使用します。
hsp3cl.asをインクルードするとinputが標準入力の取得として、mesが標準出力への書き出しとして動作するようになります。
stdio型mcpサーバーではメッセージが改行区切りなので
入力は改行ごとになるようにinputのオプションを指定し、
出力文はjsonを文字列に変換した後、改行を削除し、メッセージの最後にだけ改行を追加しています。
UTF-8出力したいのでWin32APIでのコードページの変更と
書き出し時にmesではなくWin32APIのWriteFile
UTF-8エンコードされたバイナリとして標準出力に書き出しています。
hsp3utf.asを使用したらinputmesもそのままでUTF-8入出力対応になるかもしれませんが今回は試していないです。

挨拶の内容を応答する箇所は以下になります。

hoursパラメータの範囲によって返す文字列を変更しています。

参照

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?