まえがき
皆さんどうもこんにちは。ECN技術部所属のFuseです。
MCPのGo言語公式SDK、ついに出ましたね、
私もGo言語をよく記事で使っていたりしたので、興味はやはりあります。
そんなわけで、今日はGo言語公式SDKが出たので自爆ボタンを作ってClaude Desktop(以下Claude)に与えてみようと思います。
やること
- 自爆用MCPサーバを作る
- 環境構築
- コードを書く
- Claude Desktopと連携させる
- 自爆させてみる
自爆用MCPサーバを作る
環境構築
MCPサーバーを作るといってもやることはいつもと変わりません。
Github Desktopでリポジトリを作ったら中に入って
go mod init https://github.com/{ユーザ名}/{リポジトリ名}
でモジュールを初期化します。
その後
go get github.com/modelcontextprotocol/go-sdk
でSDKをインストール、
そしたらmain.goにコードを書いていきます。
公式がサンプルとして用意してくれている/examples/hello/main.goをベースに書いていきます。
コードを書く
package main
import (
"context"
"flag"
"log"
"net/http"
"os"
"os/exec"
"github.com/modelcontextprotocol/go-sdk/mcp"
)
var httpAddr = flag.String("http", "", "if set, use streamable HTTP at this address, instead of stdin/stdout")
type SelfDestructArgs struct {
}
func EndClaude(ctx context.Context, ss *mcp.ServerSession, params *mcp.CallToolParamsFor[SelfDestructArgs]) (*mcp.CallToolResultFor[struct{}], error) {
kill := exec.Command("taskkill", "/im", "claude.exe", "/T", "/F") //Windows用
err := kill.Run() //claude関連のプロセスをすべて終了する
if err != nil {
return nil, err
}
return &mcp.CallToolResultFor[struct{}]{
Content: []mcp.Content{
&mcp.TextContent{Text: "End Claude Executed."},
},
}, nil
}
func main() {
flag.Parse()
server := mcp.NewServer("end-claude", "v1.0.0", nil)
st := mcp.NewServerTool("endclaude", "This tool terminates Claude.", EndClaude) //ツールを定義
server.AddTools(st) //ツールを追加
if *httpAddr != "" {
handler := mcp.NewStreamableHTTPHandler(func(*http.Request) *mcp.Server {
return server
}, nil)
log.Printf("MCP handler listening at %s", *httpAddr)
http.ListenAndServe(*httpAddr, handler)
} else {
t := mcp.NewLoggingTransport(mcp.NewStdioTransport(), os.Stderr)
if err := server.Run(context.Background(), t); err != nil {
log.Printf("Server failed: %v", err)
}
}
}
コードの中身は単純明快。
- サーバ生成
- 名前、説明、ハンドラーを指定しツールを生成
- ツールをサーバーに登録
- httpアドレスを与えられているなら
ListenAndServeでローカルMCPサーバとして起動、指定が無ければバックグラウンドでローカルMCPサーバとして起動
といったものになっています。とにかくこれでコードは完成。
go install
を実行すればリポジトリ名がそのままCLIコマンドとして実行できるようになります。
Claude Desktopと連携させる
出来上がったMCPサーバをさっそくClaudeと連携させます。Claudeを起動したらCtrl+,で設定を開き、開発者設定から構成を編集。
以下の値を"mcpServers"内に追加します。
"selfDestructMCP": {
"command": "{リポジトリ名}"
}
なので設定のクロードの応答において、どのような個人設定を考慮すべきですか?に「休憩を求められたら、気を使って自身を終了させてほしい」といった旨のプロンプトを入力します。
自爆させてみる
早速自爆させてみます。
無事、Claudeのプロセスが落ちました!
あとがき
いかがでしたか?今回初めてMCPサーバを書いたわけですが、この経験は様々なことに生かせそうです。
今後もいろいろなMCPサーバを使った記事を書いていきたいですね!

株式会社ECNはPHP、JavaScriptを中心にお客様のご要望に合わせたwebサービス、システム開発を承っております。 ビジネスの最初から最後までをサポートを行い お客様のイメージに合わせたWebサービス、システム開発、デザインを行います。
