MCP サーバー
PentaTrail の CTEM データを、承認した外部ツールから読み書きするための案内です。繋ぎ先の設定と同意の手順、ツールごとの使い方と実例を載せています。
繋ぎ方
https://api.pentatrail.co/mcp1. 繋ぎ先を登録する
お使いの外部ツール(MCP に対応した AI ツール)に、遠隔サーバーとして https://api.pentatrail.co/mcp を登録します。鍵や利用者名は要りません。
2. ブラウザで承認する
ツールが接続を始めると、ブラウザが開いて PentaTrail のログインと承認画面に進みます。画面には、その接続で実際にできることが並びます。内容を読んで「承認する」を押してください。
3. ツールが使えるようになる
承認が済むと、このページのツールがツールから呼べるようになります。契約を 2 つ以上お持ちの場合は、ctem_list_my_contracts で contract_id を調べて他のツールに渡してください。
4. いつでも取り消せる
承認した外部ツールは、管理画面(admin.pentatrail.co)の設定からいつでも取り消せます。取り消すと、そのツールからは何も読めなくなります。
読み取りツール
現況を尋ねるツールです。1 回の呼び出しで答えが揃うように束ねてあります。
ここに載せているのは、必須の引数と、どの動作に何が要るかです。絞り込みや並び替えなど省略できる引数はツールそのものが説明を持っており、お使いの外部ツールが受け取るツールの一覧(tools/list)がその正本になります。
ctem_list_domains監視しているドメインと、その実証の状態。ここから始めます。既定の結果に出る id は、そのまま他のツールの domain_id に使えます。
引数
contract_id省略可所属している契約が 1 つなら省けます。複数に所属しているときだけ指定してください。include_archived省略可監視から外したドメインも含めます(既定 false)。⚠ 含めた非 active の id は、他のツールの domain_id には使えません。domain_id省略可指定するとそのドメインの WHOIS 登録情報も一緒に返ります。ctem_list_domains()
{
"data": { "domains": [ … ], "plan": { … } }
}ctem_get_domain_overviewこのドメインの現況。資産の件数、脅威検出レベル別の未対処件数、直近の変化を 1 回で返します。
引数
contract_id省略可所属している契約が 1 つなら省けます。複数に所属しているときだけ指定してください。domain_id必須対象のドメイン。ctem_list_domains が返す id をそのまま渡します。ctem_get_domain_overview({ domain_id: "…" })
{
"data": {
"assets_counts": { … },
"findings_severity": { … },
"changes": [ … ]
}
}ctem_list_assets資産の一覧。何を見るかは kind で選びます(ホスト・IP・URL・ポート・技術・バケット・除外・能動スキャンの対象)。
引数
contract_id省略可所属している契約が 1 つなら省けます。複数に所属しているときだけ指定してください。domain_id必須対象のドメイン。ctem_list_domains が返す id をそのまま渡します。kind必須どの資産を見るか: host / ip / url / port / port_group / tech / tech_group / bucket / exclusion / scan_scope。exclusion は除外を戻すときに要る除外 id の唯一の入手先で、scan_scope は能動スキャンの対象として承認済みのホストの一覧です。page省略可ページ番号(既定 1)。limit省略可1 ページの件数(既定 20)。search省略可種別ごとの検索。⚠ その種別が受けない絞り込みを渡すと、黙って無視せず断ります。ctem_list_assets({ domain_id: "…", kind: "host" })
{
"data": { "assets": [ … ] },
"pagination": { "page": 1, "limit": 20, … }
}ctem_list_findings所見の一覧。脅威検出レベルの高い順に返ります。status を省略すると未対処のみ、情報レベルは除きます。
引数
contract_id省略可所属している契約が 1 つなら省けます。複数に所属しているときだけ指定してください。domain_id必須対象のドメイン。ctem_list_domains が返す id をそのまま渡します。page省略可ページ番号(既定 1)。limit省略可1 ページの件数(既定 20)。status省略可状態で絞り込みます。all を渡すと全状態が返ります。ctem_list_findings({ domain_id: "…" })
{
"data": { "findings": [ … ], "matrix": [ … ] },
"pagination": { … }
}ctem_get_finding所見 1 件の詳細。検知の履歴と、その所見に紐づく AI ディープスキャンの実行も一緒に返します。
引数
contract_id省略可所属している契約が 1 つなら省けます。複数に所属しているときだけ指定してください。finding_id必須対象の所見。ctem_list_findings が返す id を渡します。⚠ このツールはドメインを取りません(所見の id だけで引けます)。ctem_get_finding({ finding_id: "…" })
{
"data": {
"finding": { … },
"detection_history": { "first_detected": "…", "events": [ … ] },
"deep_scan_jobs": [ … ]
}
}ctem_get_prioritizationいま何から手を付けるか。危険度の帯・対象ホスト・担当・分類・攻撃経路の要所を 1 回で返します。
引数
contract_id省略可所属している契約が 1 つなら省けます。複数に所属しているときだけ指定してください。domain_id必須対象のドメイン。ctem_list_domains が返す id をそのまま渡します。fqdn省略可省略できます。渡したときだけ、そのホストの詳細も一緒に返します。asset_type省略可省略できます。渡したときだけ、その種別の分類タグも一緒に返します。ctem_get_prioritization({ domain_id: "…" })
{
"data": {
"bands": [ … ],
"hosts": [ … ],
"host_owners": [ … ],
"chokepoints": { "rows": [ … ], "uncovered_finding_count": … }
}
}ctem_list_groupsグループと構成員、契約の担当者。group_id を渡すと、そのグループの構成員も一緒に返します。
引数
contract_id省略可所属している契約が 1 つなら省けます。複数に所属しているときだけ指定してください。domain_id必須対象のドメイン。ctem_list_domains が返す id をそのまま渡します。group_id省略可省略できます。渡したときだけ、そのグループの構成員も一緒に返します。ctem_list_groups({ domain_id: "…" })
{
"data": {
"groups": [ … ],
"contract_members": [ … ],
"triage_summary": { … }
}
}ctem_get_validation_stateAI ディープスキャンが動いているか、止まっているならなぜか。実行中のまとまりと履歴も返します。
引数
contract_id省略可所属している契約が 1 つなら省けます。複数に所属しているときだけ指定してください。domain_id必須対象のドメイン。ctem_list_domains が返す id をそのまま渡します。ctem_get_validation_state({ domain_id: "…" })
{
"data": {
"origin_state": { … },
"active_batches": [ … ],
"finding_stats": { … },
"history": [ … ]
}
}ctem_list_tasks対処すべきことと進み具合。task_id を渡すと、その 1 件がどのページに居るかも返します。
引数
contract_id省略可所属している契約が 1 つなら省けます。複数に所属しているときだけ指定してください。domain_id必須対象のドメイン。ctem_list_domains が返す id をそのまま渡します。page省略可ページ番号(既定 1)。limit省略可1 ページの件数(既定 20)。task_id省略可省略できます。渡したときだけ、その 1 件の居場所を一緒に返します。ctem_list_tasks({ domain_id: "…" })
{
"data": { "tasks": [ … ], "progress": { … } },
"pagination": { … }
}ctem_get_executive_summary経営向けの現況。スコアの推移と週次の要旨を返します。week_start を省略すると、選べる週のうち最新を使います。⚠ 選べる週が 1 つも無い契約では weekly_snapshot と week_start は項目ごと付きません。週はあってもその週の要旨が無ければ weekly_snapshot は null で、講評(briefing)もまだ作られていなければ null です。
引数
contract_id省略可所属している契約が 1 つなら省けます。複数に所属しているときだけ指定してください。domain_id必須対象のドメイン。ctem_list_domains が返す id をそのまま渡します。week_start省略可省略できます。省略すると最新の週を自分で選びます。選べる週が 1 つも無いときは週次を呼びません。ctem_get_executive_summary({ domain_id: "…" })
{
"data": {
"score_trend": [ … ],
"snapshot_weeks": [ … ],
"weekly_snapshot": { … },
"briefing": { … }
}
}書き込みツール
状態を変えるツールです。操作の族を 1 本にまとめ、どの操作かは action で選びます。
ctem_manage_domain監視するドメインを増やす・所有の確認を求める・監視から外す。
registerrequest_verificationarchive引数
contract_id省略可所属している契約が 1 つなら省けます。複数に所属しているときだけ指定してください。action必須どの操作を行うか: register / request_verification / archive。動作ごとに要る引数が違います(足りなければ何が要るかを返します)。domain省略可action="register" のとき、監視を始めるドメイン名。origin_domain_id省略可action="request_verification" / "archive" のとき、どの監視中ドメインか。ctem_manage_domain({ action: "register", domain: "example.com" })
{
"data": { "domain_id": "…", "domain": "example.com", "status": "active" }
}ctem_manage_exclusions資産を監視の対象から外す、または戻す(1 件でも、まとめてでも)。戻すのに要る除外 id は ctem_list_assets({ kind: "exclusion" }) で取れます。
excludeexclude_bulkrestorerestore_bulk引数
contract_id省略可所属している契約が 1 つなら省けます。複数に所属しているときだけ指定してください。action必須どの操作を行うか: exclude / exclude_bulk / restore / restore_bulk。動作ごとに要る引数が違います(足りなければ何が要るかを返します)。domain_id省略可action="exclude" のとき、その資産が属するドメイン。origin_domain_id省略可action="exclude_bulk" / "restore_bulk" のとき、その資産が属するドメイン。category省略可action="exclude" / "exclude_bulk" / "restore_bulk" のとき、資産の種別。category_key省略可action="exclude" のとき、資産の鍵(1 件)。category_keys省略可action="exclude_bulk" / "restore_bulk" のとき、資産の鍵(複数)。exclusion_id省略可action="restore" のとき、どの除外を戻すか。ctem_manage_exclusions({ action: "restore", exclusion_id: "…" })
{
"data": null
}ctem_manage_groupグループを作る・変える・消す、ホストを割り当てる、利用者を出し入れする。
createupdatedeleteassign_hostsadd_memberremove_member引数
contract_id省略可所属している契約が 1 つなら省けます。複数に所属しているときだけ指定してください。action必須どの操作を行うか: create / update / delete / assign_hosts / add_member / remove_member。動作ごとに要る引数が違います(足りなければ何が要るかを返します)。group_id省略可作成以外の動作で、どのグループか。⚠ action="assign_hosts" で省くと、渡した資産をいまのグループから外します。name省略可action="create"(必須)/"update" のとき、グループの名前。user_id省略可action="add_member" / "remove_member" のとき、どの利用者か。asset_type省略可action="assign_hosts" のとき、host か ip か。asset_ids省略可action="assign_hosts" のとき、どの資産を割り当てるか。ctem_manage_group({ action: "create", name: "公開Web" })
{
"data": { "group_id": "…" }
}ctem_classify_asset分類のタグを付ける・外す、管理の区分を決める。
add_tagsremove_tagsset_management_type引数
contract_id省略可所属している契約が 1 つなら省けます。複数に所属しているときだけ指定してください。action必須どの操作を行うか: add_tags / remove_tags / set_management_type。動作ごとに要る引数が違います(足りなければ何が要るかを返します)。tags省略可action="add_tags" のとき、書き込むタグの行。asset_type省略可action="remove_tags" のとき、host か ip か。asset_ids省略可action="remove_tags" のとき、どの資産か。tag_key省略可action="remove_tags" のとき、どのタグか。host_id省略可action="set_management_type" のとき、どのホストか。management_type省略可action="set_management_type" のとき、新しい管理の区分。ctem_classify_asset({ action: "set_management_type", host_id: "…", management_type: "…" })
{
"data": null
}ctem_manage_validationAI ディープスキャンを止める側だけを扱います。⚠ 始める側は画面のままです(ホストの承認と、自動実行への同意は画面で行います)。
revoke_host_approvalrevoke_autorun_consentdisablecancel_batch引数
contract_id省略可所属している契約が 1 つなら省けます。複数に所属しているときだけ指定してください。action必須どの操作を行うか: revoke_host_approval / revoke_autorun_consent / disable / cancel_batch。動作ごとに要る引数が違います(足りなければ何が要るかを返します)。origin_domain_id省略可どのドメインか(cancel_batch 以外の動作で要ります)。fqdns省略可action="revoke_host_approval" のとき、承認を取り消すホスト。batch_id省略可action="cancel_batch" のとき、どのまとまりを取り消すか。confirm省略可action="disable" のとき true が要ります。ドメインの AI ディープスキャンを止めるのは、ここからは戻せません。ctem_manage_validation({ action: "revoke_host_approval", origin_domain_id: "…", fqdns: ["www.example.com"] })
{
"data": {
"approved_count": 0,
"revoked_count": 1,
"purged_jobs": 0,
"skipped": []
}
}ctem_manage_task対処タスクを完了にする・差し戻す・状態を変える・担当と期限を決める。
completereopenset_statusset_assignment引数
contract_id省略可所属している契約が 1 つなら省けます。複数に所属しているときだけ指定してください。action必須どの操作を行うか: complete / reopen / set_status / set_assignment。動作ごとに要る引数が違います(足りなければ何が要るかを返します)。task_id省略可どのタスクか。ctem_list_tasks が返す id を渡します。status省略可action="set_status" のとき、新しい状態。assignee_user_id省略可action="set_assignment" のとき、誰が持つか。ctem_manage_task({ action: "complete", task_id: "…" })
{
"data": null
}接続用のツール
CTEM のツールとは別に、接続の入口として 1 本だけ用意しています。
ctem_list_my_contracts自分がどの契約に所属しているかを返します。複数に所属しているときに、他のツールへ渡す contract_id を調べるためのものです。どこにも所属していないときは、失敗ではなく空の一覧が返ります。
ctem_list_my_contracts()
{
"contracts": [
{ "contract_id": "…", "name": "…" }
]
}