はじめに
最初にお断りとなりますが、この投稿は技術解説やノウハウを伝えるものではありません (;^_^A
エージェント AI を使ったプログラミング(AI駆動開発)を試してみた感想文です。
今さら感がありますが、私自身がエージェント AI を使ったプログラム開発や、AI と外部データを連携させるための MCP サーバーの作成を体験した内容を投稿しました。
「Google Antigravity の設定・使い方」や「MCPサーバーの作成」に関する内容は、多数の良い記事・投稿があるため、この投稿では手順や解説は省略し、参考にしたURLを最後に紹介させて頂きます。
やりたいこと
Antigravity で「Hello World!」はもう飽きた、、、ということで。
Flexera One は、ITシステムで使用しているライセンス管理や、ハードウェア・ソフトウェアのライフサイクル管理、脆弱性管理を実現するソリューションです。
Flexera One には REST API・GraphQL が提供されているため、外部からデータを参照することが可能です。REST API・GraphQL を使ってデータを取得する MCP サーバーを作成し、
・自社のサーバーに脆弱性が存在するか確認する。
・重大な脆弱性(CVSSのスコアが高い)が含まれるソフトウェアを検索する。
といったことを、AI と対話することを目標としました。
最初に結果から
3~4時間ほどで 「ひとまず動く」MCP サーバーはできました。なぜ「ひとまず」かというと、出来上がったコードの精査ができていないからです。
課題を感じた部分
できあがったというコードを実行したら、MCPサーバーとして起動したが、APIの認証が出来てなかった。
→ データ取得ができないシロモノ。
次々とデバッグモジュールを作成し、プロジェクトフォルダ内がぐちゃぐちゃに。
→ まるで人間のようだ。。。
有能さを感じた部分
決して細かく要件を入力したわけではないが、イメージしていたものが出来た。
→ 実装計画を作ってくれるので、要件の不足に気づき、追加・補足ができる。
→ とはいえ、人間の言語化能力はやっぱり重要。
次々にGraphQLを実行し、取得するデータの関連性を調査してコードを生成。エラーが発生しても、自身で検証・修正を繰り返す。基本的に人間のサポート不要。
→ 人間に知識・スキルがあれば、AI をサポートしてさらに時短可能。
実装計画の作成
最初に入力した要件は以下の内容です。
Flexera one の REST API・GraphQL を使い IT Visibility のデータを使った MCPサーバーを実装する。
開発言語はTypeScriptとする。
STDIO方式で実装する。
作成したMCPサーバーを、Antigravity のMCPサーバーとして利用するため設定する。
IT Visiblitiy の以下の情報を利用する。
・デバイスデータセット
・ソフトウェアデータセット
・脆弱性データセット
MCPサーバーは脆弱性に関する情報を提供する動作をする。
利用者は、デバイス名やソフトウェア名、脆弱性の重大度を指定した問い合わせを行う。
応答は、問合せに該当する脆弱性が含まれるデバイスについて応答する。
応答には、脆弱性の重大度・CVE情報・ソフトウェア名を含めて応答する。
実装計画のうち、以下3点をコメントして修正。
- 「認証情報」を、環境変数ではなく設定ファイルに保存するように修正。
- 「エンドポイント」に、GraphQL用に加え、認証用も追加。(※)
- 「目的」に、検索方法として以下4種類の方法を想定するよう修正。
- デバイスに基づいた問い合わせ。
- ソフトウェアに基づいた問い合わせ。
- 脆弱性(CVEID)に基づいた問い合わせ。
- CVSSスコアに基づいた問い合わせ。
(問題4の対応で追加、後述)
※ Flexera one は、「認証用」「REST API用」「GraphQL用」の3種類のエンドポイントがあり、また利用している SaaS サービスのロケーション(US、EU、APAC)ごとに、エンドポイントが異なります。今回は「認証用」「GraphQL用」を使用しています。
※ ちなみに、エンドポイントのURLを間違っている。。。設定ファイル側で直しましたが。
【誤】https://api.flexera.com/itv/v1/graphql
【正】https://api.flexera.com/graphql/v1/orgs/{{org_id}}/graphql
org_id・・・Flexera one 利用者ごとの個別番号
私が手を動かしたのは
・実装計画書の確認とコメント
・Node.js のインストール

・コマンド実行の承認
設定が「Request Review」なのでコマンド実行をつどつど承認。

・MCP サーバー作成後の作業

{
"refreshToken": "YOUR_FLEXERA_REFRESH_TOKEN",
"auth_endpoint": "https://login.flexera.com/oidc/token",
"api_endpoint": "https://api.flexera.com/graphql/v1/orgs/XXXXX/graphql"
}
{
"mcpServers": {
"flexera-it-visibility": {
"command": "node",
"args": [
"c:\\Users\\XXXXXXXX\\.gemini\\antigravity\\playground\\luminescent-space\\dist\\index.js"
],
"env": {
"FLEXERA_CONFIG_PATH": "c:\\Users\\XXXXXXXX\\.gemini\\antigravity\\playground\\luminescent-space\\config.json"
}
}
}
}
・問題1への介入(後述)
問題1 認証すらできていない
20分くらいで MCP サーバーの実装ができたというので、さっそく Gemini に質問したところ、以下のエラー。
Error in MCP tool execution: Error retrieving vulnerabilities: fetch failed
ネットワーク周りの問題を疑い、
・HTTPS_PROXY の設定確認
・nslookup による名前解決確認
・curl による認証実行
を次々と自動実行する中で、
curl -I https://login.flexera.com/oidc/token
というコマンドが実行されたのが目に留まりました、全然指定が足りてないよ・・・。
その後も認証用サーバーからエラーが延々と返ってくるのを見て、たまらず介入。処理を中断して、以下のように指示。
Curl コマンドを用いて Refresh Token から Access Token を取得する場合は、以下のコマンドを実行してください。
curl -s -i -X POST https://login.flexera.com/oidc/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=refresh_token&refresh_token=<refreshTokenの設定値>"
問題2 とりあえず作ってました、すいません
認証と接続の問題が解決し、再度 Gemini に質問したところ、以下のエラー。
Error in MCP tool execution: Error retrieving vulnerabilities: Flexera API Error: GraphQL Error (Code: 422): {"response":{"status":422,"headers":{},"body":"(以下略)
その後、自動的に次々と GraphQL を実行し
\luminescent-space > node debug_schema.mjs
Fetching access token...
(node:30108) Warning: Setting the NODE_TLS_REJECT_UNAUTHORIZED environment variable to '0' makes TLS connections and HTTPS requests insecure by disabling certificate verification.
(Use `node --trace-warnings ...` to show where the warning was created)
Access token obtained.
Introspecting schema...
Root Query Fields:
- businessServices
- catalog
- cloudAssets
- cloudEc2Instances
- cloudEntitlements
- cloudInstanceSpend
- cloudLicenseConsumption
- cloudSoftwareSpend
- devices
- software
- virtualMachineHosts
そして、出てきた結論。
・・・え、、、
実装計画書に「ユニットテストは今回は実装しない (プロトタイピング重視)。」とはありましたが、一度も確認せずにコードを作っていたのか。。。
次々と GraphQL を実行し、コードを修正していくのは圧巻でしたが。
問題3 Gemini がキレた???
次に Antigravity がハマっていたのが、脆弱性の含まれるデバイス名は取得できるが、肝心の脆弱性の情報が取得できないという状態。
No vulnerabilities found matching the criteria.
このメッセージ自体は、対象のデバイスに脆弱性は無いとも読み取れるのですが、Antigravity は脆弱性が取得できないのをおかしいと延々とデバッグを実行します。
(実際には対象デバイスに脆弱性があるので、結果の異常に気付くのはすごい。)
--- Test: With_All ---
Returned 1 devices.
[0] Name: 34-tachi-itv-be, SW: Present
Vulns: 0 <=== 脆弱性ゼロ件
そして延々とデバッグを実行し、、、
このスクショは途中で切っていますが、「Response. Japanese. Done.」が延々と出たときは、Gemini が癇癪を起したかと思いました (;^_^A
そして、出した結論。
この問題の対応にもっとも時間を(Gemini のトークンも)費やしました。あと、私も延々とコマンド実行を承認する羽目に。
しかし自力で解決したのはすばらしい。
問題4 自己増殖する MCP サーバー
デバイス名による問合せに回答ができるようになり、問合せの条件を変えながら試していましたが、、、
その場で必要なコードを生成して応答している状態でした。いやいやいや、これは Antigravity だからできる芸当で、MCPサーバーとしては機能が足りてないよね。ってことで、実装計画書に検索方法をコメントして追加。
できた・・・かしら
デバイス名で問合せ
ソフトウェア名で問合せ
深刻度で問合せ
まとめ
正直言って未来を感じました。Gemini の人間性(人間臭さ?)を感じました。
というのはさておき、MCPサーバー作成の学習を始めたばかりの私でも、3~4時間でひとまず動く環境ができたのは感動しました。
AI が開発の大部分を担うことになっても、人間のもつ知識・スキルは引き続き重要とも感じています。要件をまとめるときに、「デバイスデータセット」「ソフトウェアデータセット」「脆弱性データセット」を使ってと指示しましたが、実現したい機能に必要なデータの取得方法が指示できれば、AI による開発もある程度ポイントを絞って進められると感じました。また「問題1」で紹介したように、エラーの原因やデバッグ方法を人間がサポートすることにより、問題解決の時間も(トークンも)削減できるだろうと考えています。
今回生成したコードは、何も精査ができていないため公開はできませんが、MCPサーバーの自己学習教材として活用しようと思います。
※ なお多数の脆弱性が出力されていますが、検証用のデータです。念のため。
参考にさせて頂いたドキュメント
以下の投稿や記事を参考にしました。
大変読みやすく短時間で理解が進みました、多謝!!!









