6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FreeBSDでgemini-cliとMCPを試してみる

6
Last updated at Posted at 2025-12-04

はじめに

AIツールとして「何とかCLI」がいくつか出回っていますが、FreeBSDで稼動するもの…となると数は少ないです。自分が把握しているものとしては gemini-cligithub-copilot-cli くらいで。
claude-cli に興味を持っていたこともありましたが、FreeBSDで試しても動かなかったこと(今は動くという話も)、gemini-cli がportsにあることを偶然知ったこと、既にグーグルに魂を売ってた(アカウントは作ってた)こと、から、試しに導入してみました。

注意

  • 何でか大量にメモリ食います。これ動かすだけで10GB使う言うてる。実メモリだけで300MB…。
  • 今回試したMCP一つに1GB強のストレージ容量を食います。
  • これ書いてる、修正している間にバージョンアップがw。

導入方法

sudo pkg install -y gemini-cli

その後 gemini コマンドがインストールされます。自分としては下記の設定を事前に入れておくくらいです。
もちろん入れなくても良いし、このレベルの設定であれば設定画面(/settings コマンド)で設定可能です。

~/.gemini/settings.json
{
  "general": {
    "previewFeatures": true,
    "vimMode": true
  },
  "ui": {
    "showModelInfoInChat": true
  }
}

ちなみにですが、自分が端末アプリとして使ってるPuTTYだと、イケてない表示になるので、Windows Terminalの使用をお勧めします。もしかしたら上手く設定すればイケるのかもしれませんが、調べてないです。またFreeBSDネイティブのコンソールでもイケてるかは分からないです。
余談ですが160桁×50行くらいで使うのがちょうどいい感じの表示になります。

スクリーンショット 2025-12-04 011856.png

1. Login with Google を選びます(エンターキーを押す)。

URLが表示されるので、そのURLをブラウザにコピペしてアクセス、グーグルにログインしたら、アプリからの使用許可表示に対して、許可を行い、最後 Sign in to Gemini Code Assist and the Gemini CLI という画面で表示される認証コードを端末にコピーして設定は完了です。

一応この瞬間から使えるようにはなります。/settings と打って設定するもよし、/quit と打って終了するもよし、で。

MCPにつないでみよう!

どんなネタを…と考えるところですが、AWSで色々試していたので一つ紹介してみます。無料でかつアカウントレスで使えるドキュメント系のMCPサーバーであるところの awslabs.aws-documentation-mcp-serveraws-knowledge-mcp-server につないでみます。

導入手順としては下記のサイトに書いてある手順を参考に実施します。

uv のインストールをしろ、とありますが、FreeBSDでは pkg コマンドで実施します。

sudo pkg install -y uv

またMCPの設定についてですが、現時点1では設定画面で行えません。コマンドラインで設定するか ~/.gemini/settings.json を直接編集します。
ただし settings.json を編集…と言っても若干、仕様が違ってるようで、そのままコピペしても動きません。その辺り込みでコマンドラインに落とし込んで設定するものとします。

またドキュメント記載の内容をそのまま設定すると、毎回毎回、非常に時間の掛かる初期化が実行されます(uvxの仕様)。毎回初期化を行うという無駄な処理を行わないため、最適化を実施します2

その辺り込みで、以下のコマンドで設定を行います。

uv tool install awslabs.aws-documentation-mcp-server@latest
gemini mcp add -s user -t stdio -e FASTMCP_LOG_LEVEL=ERROR -e AWS_DOCUMENTATION_PARTITION=aws awslabs.aws-documentation-mcp-server uv run awslabs.aws-documentation-mcp-server
gemini mcp add -s user -t http aws-knowledge-mcp-server https://knowledge-mcp.global.api.aws

閑話休題。手動で編集した場合、以下のようにマージされた状態となることが期待されます。jq コマンド等を使用してJSONとしてのフォーマットが正しいか確認してください(, の抜け漏れとか過剰な , とか)3

~/.gemini/setting.json
{
  "general": {
    "previewFeatures": true,
    "vimMode": true
  },
  "ui": {
    "showModelInfoInChat": true
  },
  "mcpServers": {
    "awslabs.aws-documentation-mcp-server": {
      "command": "uv",
      "args": [
        "run",
        "awslabs.aws-documentation-mcp-server"
      ],
      "env": {
        "FASTMCP_LOG_LEVEL": "ERROR",
        "AWS_DOCUMENTATION_PARTITION": "aws"
      }
    },
    "aws-knowledge-mcp-server": {
      "httpUrl": "https://knowledge-mcp.global.api.aws"
    }
  }
}

試してみる

以下のプロンプトを実行してみます。

CloudFront+S3構成するためのCloudFormationのサンプル(YAML)を提案してください。

WriteFile Writing to cloudfront-s3.yaml と結果が表示されてファイルを保存するか聞いてくるので保存します(Yes, allow once)。

とりあえず保存された cloudfront-s3.yaml というファイルの内容を確認した限りは上手く記述されてるように見えました。

スクリーンショット 2025-12-04 031216.png

MCPありと無しとで比較すると…なんとも言えない微妙な差分。まだ使いこなせてないのかもしれない。

というわけでスペックについて聞いてみました。

AWS Lambda の関数名の長さ制限について教えてください。

MCP使っていいのかと聞いてきますね。

スクリーンショット 2025-12-06 124911.png

というわけで、上手く回答が得られました。

スクリーンショット 2025-12-06 125135.png

コマンドラインについて

gemini

  • gemini mcp list
  • gemini mcp add
    • -s: スコープ(user または project)。user の時は ~/.gemini/settings.json に、project の場合は .gemini/settings.json に保存されます。
    • -t: トランスポート(stdiossehttp)。コマンド指定するなら stdio、URL指定するなら(たいてい)httpを指定します。
    • -e: 環境変数の指定
    • -H: リクエストヘッダーの指定
    • その他(他にも色々あります)
  • gemini mcp remove
    • -s: スコープの指定(user または project)。gemini mcp add と同じ。

uv

作業にあたっていくつか使ったコマンドの一覧です。これ自体はテーマでないので紹介レベルで。

  • uv cache prune
  • uv cache size --preview-features cache-size
  • uv cache clean
  • uv tool list --show-paths
  • uvx awslabs.aws-documentation-mcp-server@latest
uv tool install awslabs.aws-documentation-mcp-server@latest
uv tool run awslabs.aws-documentation-mcp-server
  • uv tool update awslabs.aws-documentation-mcp-server

ポリシーエンジン

色々と作業しているとMCPへの問い合わせやコマンドを無条件に実行して欲しい時があります。
そのような時に Policy Engineの設定を行います。

例えばAWS MCPへの問い合わせを無条件に許可するのであれば下記の手順でファイルを作成します。

mkdir -p ~/.gemini/policies

このディレクトリにて以下のTOMLファイルを作成します(名前はわかり安めに適度に決める)。

~/.gemini/policies/aws-mcp-servers.toml
[[rule]]
toolName = [
  "aws___search_documentation",
  "aws___read_documentation",
  "aws___recommend",
  "aws___list_regions",
  "aws___get_regional_availability",
  "search_documentation",
  "read_documentation",
  "recommend"
]
decision = "allow"
priority = 100

このリストをどうやって生成すればいいのか?についてGemini上で /mcp list を実行すればそれぞれのMCPでのツール一覧が表示されます。これを取り込みます。

 > /mcp list
Configured MCP servers:

🟢 awslabs.aws-documentation-mcp-server - Ready (3 tools)
  Tools:
  - read_documentation
  - recommend
  - search_documentation

🟢 aws-knowledge-mcp-server - Ready (5 tools)
  Tools:
  - aws___get_regional_availability
  - aws___list_regions
  - aws___read_documentation
  - aws___recommend
  - aws___search_documentation

今回は「許可」でしたが「拒否」の設定も可能です。組み合わせとしてどうなるかまでは検証していませんが、とりあえずこの設定を実施して、だいぶ調査がはかどるようにはなりました。

よくある質問とその答え

Q.なぜVIMモードを推奨するw

A.改行したいのに改行入力の取り扱いが微妙だったので。どう改行入れればいいのか考える前にVIMモードで編集しちゃいました。
まぁ入力モードでも問題起こるわけですがたぶん CTRL+RETURN かな。

Q.喧嘩売ってる?

A.VIMモードで無い時の、プロンプトを書いた後に、エラーログを貼り付けたかった時の苦労を味わってみてください。

Q.改行の入力方法は?

A.CTRL+RETURN で。

Q.ろくに参考文献が無いじゃないか

A.理解のために色々読みましたが、みんなこの程度理解してて当然、と省略されている部分が沢山あって、理解した後は参考とするには微妙でした。
せめて一次サイトの紹介はすべきではないかと。
そういう意味ではMCPとは?という点を押さえてないという意味で、この文書もあまり良くないと思わなくも無いです。

なお uvx の問題についても、Geminiと相談してトライアンド&エラーで最適化しています。

参考文献

GeminiのことはGeminiに聞くしか。

  1. 2025年12月04日現在(0.18.4)、同05日現在(0.19.1)。

  2. 他の環境ではこの辺りの手間はどうなってるんでしょう?キャッシュが効いてるとかあるのかな。

  3. AWSのドキュメントだと url と記載されているものの gemini-cli だと httpUrl となっています。直接編集する場合は要注意です。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?