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

ServiceNowアプリのリリースノート情報を取得する機能をMCPに追加してみた

0
Posted at

はじめに

自作のServiceNow MCPサーバー(tedorigawa001/ServiceNow-MCP、npm公開中)に、v1.6.0で新しいツールを2本追加しました。

  • search_store_apps — ServiceNow Storeの公開カタログをキーワード検索
  • get_store_app_versions — Storeアプリのバージョン別リリースノート(新機能・バグ修正)を取得

これでAIに「VRの最新版と今入っているバージョンの差分を教えて」と聞くと、インスタンスのインストール済みバージョンとStoreのリリースノートを突き合わせて答えられるようになりました。
この記事は、そこに至るまでの調査ログです。

想定読者

  • ServiceNowのアプリアップグレード計画を立てる人
  • 「この情報、どのテーブルに入ってるんだろう」を調べるのが好きな人
  • MCPツールを自作している人

第1歩: テーブルを探す → 無い

App Manager(プラグイン画面)には各バージョンの追加機能・修正内容が表示されます。
当然どこかのテーブルにあるはず、と探しました。

  • sys_app_version — バージョン番号・公開日・依存関係・互換プラットフォームは入っている。リリースノートのカラムは無い
  • sys_store_app / sys_remote_app — 同上
  • sys_dictionaryelement LIKE note/LIKE releaseで横断検索 — 0件

つまりApp Manager UIは、表示のたびにStore側からリモート取得しています。
Table APIベースのツールでは取得できませんでした。

第2歩: Storeページをスクレイピング → 失敗

次にstore.servicenow.comのアプリページを取りに行きました。

  • WebFetch(HTML取得) → SPAなのでタイトルしか返らない
  • ヘッドレスブラウザでレンダリング後にテキスト抽出 → 。ページ全体が<app-details-page>のShadow DOM内にあり、しかも多重ネスト

Shadow DOMを再帰的に掘るコードを書き始める前に、発想を変えました。
SPAが裏で何を取っているかをネットワークタブで見ればいい

第3歩: ネットワークを見る → 公開APIを発見

ブラウザのネットワークログにこれが流れていました。

GET https://store.servicenow.com/api/sn_store/v1/store/listings/{listing_id}/reviews?limit=2

/reviewsがあるなら/versionsもあるのでは、と試したら:

curl -s "https://store.servicenow.com/api/sn_store/v1/store/listings/21d8a32e1be06a50a85b16db234bcb7e/versions"
# → 200 OK。認証不要で、全20バージョン分のrelease_notes(HTML)・publish_date・release_typeが返ってくる

サインイン不要の公開APIでした。
VR本体なら24.0.10〜30.7.2の20バージョン分が一発で取れます。

第4歩: MCPツール化

あとは素直に実装するだけです。ポイントは2つ。

// listing_idは32桁sys_idのみ許可 — パストラバーサル/URLインジェクション防止
if (!SYS_ID_RE.test(String(args.listing_id))) {
  throw new ServiceNowError('listing_id must be a 32-char sys_id', 'INVALID_REQUEST');
}

release_notesはHTMLで返ってくるので、<li>- 変換などでプレーンテキスト化してからAIに渡します(HTMLのままだとトークンの無駄+読みにくい)。

実際に使ってみる

「VRの最新版と今のバージョンの差分を教えて」に対する動きはこうなります。

  1. インスタンスのsys_scopeからsn_vulのインストール済みバージョンを取得 → 30.3.5
  2. get_store_app_versionsでStoreの全バージョンを取得 → 最新30.7.2
  3. 間にある30.6.0/30.6.1/30.7.2のリリースノートを提示

実際のPDIで試したところ、差分3リリースの中に「セキュリティ修正」「新しい検出が誤ってINVALIDマークされる問題の修正」「100件超のfinding分割で空の修復タスクが作られるバグの修正」など、アップグレード判断に直結する情報がきちんと出てきました。

Screenshot 2026-07-16 at 20.50.16.png

まとめ

  • App Managerのリリースノートはインスタンス内に存在しない(リモート取得)
  • Storeには認証不要の公開API(/api/sn_store/v1/store/listings/{id}/versions)があり、これが唯一のプログラマティックな取得経路
  • 「間違ったパラメータでも200が返る」APIは、結果件数で正しさを検証する
0
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
0
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?