3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Gemini-cliでMCP Serverを開発する1

Posted at

はじめに

Gemini-cli 発表に触発されてcliとMCPサーバ関連という記事で環境は整ったので、gemini-cliを利用して何か作っていきたいと思いました。形態としては、わたしがプロマネ、gemini-cliが開発者という位置付けで、細かな実装は知らないプロマネが開発者に指示をして、プロマネが実現したいことを実現する想定です。

プロマネプロジェクトを立ち上げる

このプロマネは開発をするにあたり、GitHubを使ってソース等を管理するものということは知っています(会社のルールみたいな感じ)。なので、開発者にまずリポジトリ作成を依頼します。

Docker MCP ToolkitのGitHub Official

操作させるために、Docker DesktopのMCP ToolkitからCatalogの中にあるGitHub Officialの+をクリックして有効にします。有効にするにあたりGitHubにアクセスするためのtoken(Personal Access Token)を取得する必要があります。ドキュメントを参照して取得すれば良いと思います。

開発者 MCP Serverと対話する

GitHubを有効にしたので、gemini-cliからgit操作をしようとしたけれど、どうもMCP Serverが有効になっていないように見えます。/mcpコマンドを実行すると、マニュアルページをブラウザで表示してしまう状況。ちょっと環境が変わったので、うまくMCP Serverが認識されていないように見える。
折角なので、gemini-cliを介してなんとか解決を試みる。

うだうだ試してみた

gminiコマンド内からmcpサーバと接続できますか?とか、以前のDocker MCP Toolkitだと標準入出力を利用してやり取りをしているようだったので、docker mcp client はサーバ側からclientに接続するためのもので、そのコマンドではなく、docker mcp gateway runコマンドに対して標準入力経由でコマンドを送ってみてとか依頼してみる。開発者はいやいや、コマンドの名前からするとそんなんちゃうやろみたいな反応。docker mcpコマンド調べてみるで、docker mcp toolsが有望じゃね?とか調べてくれる賢いやつだ。
そして、docker mcp tools listを実行すると、starting client: initializing: reading secrets: finding secrets [github.personal_access_token github.personal_access_token]: exit status 1というエラーが表示された。
そう、設定だけしたけど、再起動していなかったので、念の為Docker Desktopを再起動して再度試すよう依頼してみる。
すると無事GetHub Officialが提供しているツールの一覧が表示された(イエー)

結局 docker mcp toolsを利用してみてと依頼するとうまくいくようになるっぽい。ただ、これがベストプラクティスなのかは不明。Docker MCP Toolkitが正式に対応しているクライアントでないとすんなりやり取りができないのか、実は別の方法があるのかは定かでないけれど、まぁ結果オーライと思うプロマネだ。

プロマネリポジトリを作成する

リポジトリの作成はできますか? と聞くと、以下のような回答、なんて賢いんだ。

はい、できます。


  docker mcp tools list の結果に create_repository というツールがありました。これを使えばリポジトリを作成できます。


  このツールがどのようなパラメータ(リポジトリ名など)を必要とするか確認するために、docker mcp tools inspect create_repository
  を実行します。

いくつか必要な情報を教えてというので、nameはdev_mcpserver, descriptionは、 mcpserverを作成してみる として。あとはデフォルトで みたいなラフな感じで依頼。

  以下のコマンドを実行します。
 ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
 │ ✔  Shell docker mcp tools call create_repository name=dev_mcpserver description='mcpserverを作成してみる' (`dev_mcpserver` という名… │
 │                                                                                                                                      │
 │    listing tools: failed to create repository: POST https://api.github.com/user/repos: 403 Resource not accessible by                │
 │    personal access token []                                                                                                          │
 │                                                                                                                                      │
 ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ リポジトリの作成に失敗しました。


  エラーメッセージ POST https://api.github.com/user/repos: 403 Resource not accessible by personal access token []
  から、GitHubのPersonal Access Tokenにリポジトリを作成する権限(repoスコープ)がないことが原因です。


  お手数ですが、以下の手順で新しいPersonal Access Tokenを生成し、MCPに設定し直していただけますでしょうか。

はぁとため息をついて、いい加減にしろよこの親父なんて目で見るでもなく淡々とエラーだと指摘しつつやって欲しいことを教えてくれる。

先ほど取得したPersonal Access Tokenの設定が間違っていて権限付与ができていなかった。設定を見直し、権限を付与してから再度試して貰う。(実はまた失敗したけど切れることなく対応してくれた)

✦ 成功しました!


  GitHub上に dev_mcpserver という名前のリポジトリが正常に作成されました。

  JSON形式でリポジトリの詳細情報が返ってきています。


  他に何か実行したいことはありますか?

プロマネいよいよ最初の目標を提示する

このリポジトリを利用して、mcp serverを作成していこうと思う。

✦ 素晴らしいですね!では、作成した dev_mcpserver リポジトリをローカルにクローンして、開発を始めましょう。


  まず、現在のディレクトリに dev_mcpserver という名前のディレクトリやファイルがないか確認します。
 ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
 │ ✔  ReadFolder .                                                                                                                      │
 │                                                                                                                                      │
 │    Error: Failed to execute tool.                                                                                                    │
 ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ 失礼しました。絶対パスで指定する必要がありました。


  カレントディレクトリ /Users/to-obara/dev/aitools/dev_mcpserver の内容を再度確認します。
 ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
 │ ✔  ReadFolder .                                                                                                                      │
 │                                                                                                                                      │
 │    Listed 4 item(s).                                                                                                                 │
 ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ 現在のディレクトリには、リポジトリ名と同じ dev_mcpserver という名前のディレクトリは存在しないため、問題なくクローンできます。


  git clone コマンドを使って、先ほど作成したリポジトリをクローンします。リポジトリのURLは https://github.com/0bara/dev_mcpserver.git
  です。
 ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
 │ ✔  Shell git clone https://github.com/0bara/dev_mcpserver.git (`dev_mcpserver` リポジトリをローカルにクローンします。)               │
 │                                                                                                                                      │
 │    Cloning into 'dev_mcpserver'...                                                                                                   │
 │    warning: You appear to have cloned an empty repository.                                                                           │
 │                                                                                                                                      │
 ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ リポジトリのクローンが完了しました。

細かな指示をしなくても良い感じに進めてくれる。さらに

 ここから、MCPサーバーの具体的な実装を始めていきます。


  どのような言語やフレームワークを使ってMCPサーバーを構築しますか?


  特に希望がなければ、Node.jsとExpressを使ったシンプルな構成から始めるのが一般的ですが、いかがでしょうか?

╭────────╮
│  > OK  │
╰────────╯

でフレームワークなどをインストールし、index.jsを生成して基本的なサーバーシステムを実現してくれた。(サーバーを起動しますと言いつつ戻ってこないのはご愛嬌)

プロマネ休憩する

ちょっと休憩。今までのやり取りをファイルに保存することはできる?
すると、MarkDown形式でsession_summary.mdに書き出してくれた。

プロマネコミットする

github にこれまでのファイルをコミットして欲しい

✦ 承知いたしました。これまでの変更をGitHubリポジトリにコミットします。


  まず、git status で現在の状態を確認します。
 ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
 │ ✔  Shell git status [in dev_mcpserver] (Gitリポジトリの現在の状態を確認します。)                                                     │
 │                                                                                                                                      │
 │    On branch main                                                                                                                    │
 │                                                                                                                                      │
 │    No commits yet                                                                                                                    │
 │                                                                                                                                      │
 │    Untracked files:                                                                                                                  │
 │      (use "git add <file>..." to include in what will be committed)                                                                  │
 │      index.js                                                                                                                         │
 │      node_modules/                                                                                                                    │
 │      package-lock.json                                                                                                                │
 │      package.json                                                                                                                     │
 │      session_summary.md                                                                                                               │
 │                                                                                                                                      │
 │    nothing added to commit but untracked files present (use "git add" to track)                                                      │
 │                                                                                                                                      │
 ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ 状態が確認できました。node_modules ディレクトリは通常、バージョン管理に含めないのが一般的なので、.gitignore
  ファイルを作成して除外設定を行います。
 ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
 │ ✔  WriteFile Writing to dev_mcpserver/.gitignore                                                                                     │
 │                                                                                                                                      │
 │    1 node_modules                                                                                                                    │
 ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ .gitignore ファイルを作成しました。


  それでは、すべてのファイルをステージングに追加します。
 ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
 │ -  Shell git add . [in dev_mcpserver] (すべての変更をステージングエリアに追加します。)                                               │
 ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

一応なんか変なファイルがコミットされても困ると思ったプロマネ
.gitignoreについて一般的なnodejs やexpressプロジェクトで除外するファイル・ディレクトリなども追加してほしいと依頼する

✦ 承知いたしました。


  一般的なNode.js/Expressプロジェクトで推奨される設定を反映した、より包括的な .gitignore
  ファイルに更新します。これには、ログファイル、環境変数ファイル(.env)、ビルド出力、IDEの設定ファイルなどが含まれます。
 ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
 │ ✔  WriteFile Writing to dev_mcpserver/.gitignore                                                                                     │
 │                                                                                                                                      │
 │    1    - node_modules                                                                                                               │
 │    1    + # Dependencies                                                                                                             │
 │    2    + /node_modules                                                                                                              │
 │    3    +                                                                                                                            │
 │    4    + # Logs                                                                                                                     │
 │    5    + logs                                                                                                                       │
 │    6    + *.log                                                                                                                      │
 │    7    + npm-debug.log*                                                                                                             │
 │    8    + yarn-debug.log*                                                                                                            │
 │    9    + yarn-error.log*                                                                                                            │
 │    10   +                                                                                                                            │
 │    11   + # Environment variables                                                                                                    │
 │    12   + .env                                                                                                                       │
 │    13   + .env.local                                                                                                                 │
 │    14   + .env.development.local                                                                                                     │
 │    15   + .env.test.local                                                                                                            │
 │    16   + .env.production.local                                                                                                      │
 │    17   +                                                                                                                            │
 │    18   + # Build output                                                                                                             │
 │    19   + dist                                                                                                                       │
 │    20   + build                                                                                                                      │
 │    21   +                                                                                                                            │
 │    22   + # Coverage directory                                                                                                       │
 │    23   + coverage                                                                                                                   │
 │    24   +                                                                                                                            │
 │    25   + # IDEs and editors                                                                                                         │
 │    26   + .vscode/                                                                                                                   │
 │    27   + .idea/                                                                                                                     │
 │    28   + *.sublime-workspace                                                                                                        │
 │    29   +                                                                                                                            │
 │    30   + # macOS                                                                                                                    │
 │    31   + .DS_Store                                                                                                                  │
 ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ .gitignore ファイルを更新しました。


  それでは、改めてすべてのファイルをステージングに追加します。
  
 │ ✔  Shell git add . [in dev_mcpserver] (すべての変更をステージングエリアに追加します。)                                               │
 ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ ファイルをステージングしました。


  次に、これらの変更をコミットします。コミットメッセージは「Initial commit with Node.js server setup」とします。よろしいでしょうか?


  もし別のメッセージが良い場合は、指定してください。
 ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
 │ ✔  Shell git commit -m "Initial commit with Node.js server setup" [in dev_mcpserver] (変更をコミットします。)                        │
 │                                                                                                                                      │
 │    [main (root-commit) 47112b0] Initial commit with Node.js server setup                                                             │
 │     5 files changed, 912 insertions(+)                                                                                               │
 │     create mode 100644 .gitignore                                                                                                    │
 │     create mode 100644 index.js                                                                                                      │
 │     create mode 100644 package-lock.json                                                                                             │
 │     create mode 100644 package.json                                                                                                  │
 │     create mode 100644 session_summary.md                                                                                            │
 │                                                                                                                                      │
 ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ コミットが完了しました。

コミットメッセージまで提案してくれて助かるなぁ

 最後に、このコミットをGitHubのリモートリポジトリにプッシュします。
 ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
 │ ✔  Shell git push origin main [in dev_mcpserver] (コミットをGitHubにプッシュします。)                                                │
 │                                                                                                                                      │
 │    remote: Support for password authentication was removed on August 13, 2021.                                                       │
 │    remote: Please see                                                                                                                │
 │    https://docs.github.com/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for                │
 │    information on currently recommended modes of authentication.                                                                     │
 │    fatal: Authentication failed for 'https://github.com/0bara/dev_mcpserver.git/'                                                    │
 │                                                                                                                                      │
 ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ プッシュに失敗しました。GitHubでは現在、HTTPS経由でのパスワード認証がサポートされておらず、代わりにPersonal Access Token (PAT)
  またはSSHキーによる認証が必要です。


  この問題を解決するには、主に2つの方法があります。


   1. SSHを利用する (推奨):
      もし、あなたのGitHubアカウントにSSHキーを登録済みであれば、リポジトリの接続情報をHTTPSからSSHに変更するのが最も簡単で安全です。SSH
  キーは設定済みでしょうか?


   2. Personal Access Token (PAT) を利用する:
      HTTPS接続のまま、パスワードの代わりに、先ほどリポジトリ作成時に利用したPATを使って認証することもできます。ただし、この操作は対話的
  に行う必要があり、このCLI環境から直接実行するのは困難です。ユーザー自身がターミナルで git push
  を実行し、パスワードを求められた際にPATを入力する必要があります。


  SSHキーが設定済みであれば、1の方法で進めるのがおすすめです。いかがいたしますか?

╭─────────────────────╮
│  > 1でお願いします  │
╰─────────────────────╯

✦ 承知いたしました。SSHを利用する方法で進めます。

  まず、現在のリモートリポジトリのURLをHTTPSからSSH形式に変更します。

  新しいSSHのURLは git@github.com:0bara/dev_mcpserver.git です。


  以下のコマンドを実行して、リモートURLを変更します。
 ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
 │ ✔  Shell git remote set-url origin git@github.com:0bara/dev_mcpserver.git [in dev_mcpserver] (リモートリポジトリのURLをHTTPSからSSH… │
 ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ リモートURLの変更が完了しました。


  それでは、再度 git push を実行して、変更をGitHubにプッシュします。今度はSSHキーで認証されるため、成功するはずです。
 ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
 │ ✔  Shell git push origin main [in dev_mcpserver] (変更をGitHubにプッシュします(SSH経由)。)                                         │
 │                                                                                                                                      │
 │    To github.com:0bara/dev_mcpserver.git                                                                                             │
 │     * [new branch]      main -> main                                                                                                 │
 │                                                                                                                                      │
 ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ 成功しました!


  ローカルでの変更が、GitHub上の dev_mcpserver リポジトリに正常にプッシュされました。


  これで一区切りつきましたね。休憩が終わったら、サーバーの起動から再開しましょう。

途中ゞで確認を求められるけれど、それほど負担ではなく、実行する内容を確認して巣進められる安心感もある。

プロマネ再度サーバー起動を試す

╭────────────────────────────╮
│  > サーバーを起動してみて  │
╰────────────────────────────╯

✦ はい、承知いたしました。Node.jsサーバーを起動します。


  dev_mcpserver ディレクトリで node index.js を実行します。

ℹ Request cancelled.

 ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
 │ -  Shell node index.js [in dev_mcpserver] (Node.jsサーバーを起動します。)                                                            │
 ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

╭──────────────────────────────────────────────────────────────╮
│  > うまく起動しない?別のシェルからだとすぐ起動するんだけど  │
╰──────────────────────────────────────────────────────────────╯

✦ ご指摘の通りです。申し訳ありません。


  node index.js はサーバーを起動し、継続的に実行され続けるプロセスです。そのため、単純に実行するとコマンドが終わらず、処理が止まったよう
  に見えてしまいます。これが、うまく起動しないように見えた原因です。


  これを解決するために、コマンドの末尾に &
  をつけてバックグラウンドでサーバーを起動します。これにより、サーバーを起動しつつ、他のコマンドも実行できるようになります。


  それでは、改めてサーバーをバックグラウンドで起動します。
 ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
 │ ✔  Shell node index.js & [in dev_mcpserver] (Node.jsサーバーをバックグラウンドで起動します。)                                        │
 ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ サーバーがバックグラウンドで起動しました。

 念のため、curl コマンドを使って、サーバーが正しく応答するか確認してみましょう。http://localhost:3000 にアクセスします。
 ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
 │ ✔  Shell curl http://localhost:3000 (起動したサーバーにリクエストを送り、動作を確認します。)                                         │
 │                                                                                                                                      │
 │      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                                   │
 │                                     Dload  Upload   Total   Spent    Left  Speed                                                     │
100    18  100    18    0     0   5227            │:-- --:--:-- --:--:--     0
 │    0 --:--:-- --:--:-- --:--:--  6000                                                                                                │
 │    Hello, MCP Server!                                                                                                                │
 ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ 成功です!


  サーバーは正しく起動しており、Hello, MCP Server! というメッセージを返しました。


  これで、基本的なWebサーバーの構築と実行が完了しました。ここから、どのような機能を追加していきますか?

プロマネラストスパート



╭──────────────────────────────────────────────────────────────────────╮
│  > ここまでのログをファイルに保存して、再度コミットしておきたいです  │
╰──────────────────────────────────────────────────────────────────────╯

✦ 承知いたしました。


  まず、session_summary.md に追記する形で、ここまでのやり取りを保存します。
  追記する内容は以下の通りです。

というわけでw
https://github.com/0bara/dev_mcpserver
ここに置いています。
引き続きMCP Serverとしての機能を追加していく予定である

3
0
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?