- アップデートされたサンプル・スキーマのインストール
- APEXのワークスペースとしてAPEXDEV、デフォルト・パーシング・スキーマとしてAPEXDEVが作成されている。
- サンプル・スキーマSHがインストールされ、スキーマAPEXDEVからすべての表が検索可能になっている。
- リモートMCPサーバーのサンプルsampleserverが実装されている。リモートMCPサーバーの実装はリポジトリmcp-appにあります。
mkdir hermes-agent
cd hermes-agent
% mkdir hermes-agent
% cd hermes-agent
hermes-agent %
npx @modelcontextprotocol/inspector
Transport TypeにStreamable HTTPを選択し、URLに以下を指定します。接続先がAutonomous AI Databaseの場合はユーザー認証による保護を外した上で、リバース・プロキシを介さず、直接Autonomous AI DatabaseのORDSを指すようにします。
hermes-agent % sql -name local-26ai-apexdev @oauth-protect.sql
SQLcl: 水 5月 13 16:11:33 2026のリリース26.1 Production
Copyright (c) 1982, 2026, Oracle. All rights reserved.
接続先:
Oracle AI Database 26ai Free Release 23.26.1.0.0 - Develop, Learn, and Run for Free
Version 23.26.1.0.0
Role hermes_role is created.
Privilege hermes.priv is created.
OAuth client hermes_client is created.
client_id: x6rMRze6ipnL7aM_u8IURA..
client_secret: l2fgQCVtKUQSCAENMZ-cQg..
Role hermes_role has granted to OAuth user hermes_client.
OS command to execute in order to obtain an access token.
export ORDS_OAUTH_CLIENT_ID="x6rMRze6ipnL7aM_u8IURA.."
export ORDS_OAUTH_CLIENT_SECRET="l2fgQCVtKUQSCAENMZ-cQg.."
curl -u ${ORDS_OAUTH_CLIENT_ID}:${ORDS_OAUTH_CLIENT_SECRET} --data "grant_type=client_credentials" http://localhost:8181/ords/apexdev/oauth/token
PL/SQLプロシージャが正常に完了しました。
Oracle AI Database 26ai Free Release 23.26.1.0.0 - Develop, Learn, and Run for Free
Version 23.26.1.0.0から切断されました
hermes-agent %
OAuthクライアントとしてhermes_clientが作成され、ORDSモジュールsampleserverが保護されます。
hermes-agent % export ORDS_OAUTH_CLIENT_ID="x6rMRze6ipnL7aM_u8IURA.."
export ORDS_OAUTH_CLIENT_SECRET="l2fgQCVtKUQSCAENMZ-cQg.."
curl -u ${ORDS_OAUTH_CLIENT_ID}:${ORDS_OAUTH_CLIENT_SECRET} --data "grant_type=client_credentials" http://localhost:8181/ords/apexdev/oauth/token
{"access_token":"vnGN5uQ_y-DEh7r58PDzeA","token_type":"bearer","expires_in":86400} hermes-agent %
hermes-agent % export ORDS_OAUTH_ACCESS_TOKEN="vnGN5uQ_y-DEh7r58PDzeA"
hermes-agent %
docker run -it --rm \
-e ORDS_OAUTH_ACCESS_TOKEN=${ORDS_OAUTH_ACCESS_TOKEN} \
-v ${PWD}:/opt/data \
nousresearch/hermes-agent setup
How would you like to set up Hermes?
↑↓ navigate ENTER/SPACE select ESC cancel
(●) Quick setup — provider, model & messaging (recommended)
→ (○) Full setup — configure everything
Select provider:
↑↓ navigate ENTER/SPACE select ESC cancel
(●) Nous Portal (Nous Research subscription)
(○) OpenRouter (100+ models, pay-per-use)
→ (○) LM Studio (local desktop app with built-in model server)
(○) Anthropic (Claude models — API key or Claude Code)
(○) OpenAI Codex
(○) Xiaomi MiMo (MiMo-V2.5 and V2 models — pro, omni, flash)
(○) Tencent TokenHub (Hy3 Preview — direct API via tokenhub.tencentmaas.com)
(○) NVIDIA NIM (Nemotron models — build.nvidia.com or local NIM)
(○) Qwen OAuth (reuses local Qwen CLI login)
(○) GitHub Copilot (uses GITHUB_TOKEN or gh auth token)
(○) GitHub Copilot ACP (spawns `copilot --acp --stdio`)
(○) Hugging Face Inference Providers (20+ open models)
(○) Google AI Studio (Gemini models — native Gemini API)
(○) Google Gemini via OAuth + Code Assist (free tier supported; no API key n
(○) DeepSeek (DeepSeek-V3, R1, coder — direct API)
(○) xAI (Grok models — direct API)
(○) Z.AI / GLM (Zhipu AI direct API)
(○) Kimi Coding Plan (api.kimi.com) & Moonshot API
(○) Kimi / Moonshot China (Moonshot CN direct API)
(○) StepFun Step Plan (agent/coding models via Step Plan API)
(○) MiniMax (global direct API)
(○) MiniMax via OAuth browser login (Coding Plan, minimax.io)
(○) MiniMax China (domestic direct API)
(○) Alibaba Cloud / DashScope Coding (Qwen + multi-provider)
(○) Ollama Cloud (cloud-hosted open models — ollama.com)
(○) Arcee AI (Trinity models — direct API)
(○) GMI Cloud (multi-model direct API)
(○) Kilo Code (Kilo Gateway API)
(○) OpenCode Zen (35+ curated models, pay-as-you-go)
(○) OpenCode Go (open models, $10/month subscription)
(○) AWS Bedrock (Claude, Nova, Llama, DeepSeek — IAM or API key)
(○) Azure Foundry (OpenAI-style or Anthropic-style endpoint — your Azure AI
(○) Vercel AI Gateway
(○) Alibaba Cloud Coding Plan — dedicated coding tier
(○) custom (direct API)
(○) Custom endpoint (enter URL manually)
(○) Configure auxiliary models...
(○) Leave unchanged
No LM Studio API key configured.
LM_API_KEY (Enter for no-auth default 'dummy-lm-api-key'):
Base URL [http://127.0.0.1:1234/v1]: http://host.docker.internal:1234/v1
Found 24 model(s) from LM Studio
Select default model:
google/gemma-4-31b
baai_robobrain2.0-7b@q6_k
baai_robobrain2.0-7b@q6_k_l
baai_robobrain2.0-7b@bf16
-> mlx-community/gpt-oss-120b
gemma-3n-e4b-it-mlx@bf16
unsloth/gpt-oss-120b
openai/gpt-oss-20b
openai/gpt-oss-120b
qwen/qwen3-30b-a3b-2507
gemma-3n-e4b-it-mlx@8bit
llm-jp-3-8x13b-instruct3
qwen/qwen2.5-vl-7b
qwen3-30b-a3b-mlx@4bit
qwen3-30b-a3b-mlx@8bit
gemma-3-27b-it-qat
gemma-3-27b-it
phi-4-mini-instruct@4bit
phi-4@8bit
phi-4@4bit
gemma-2-27b-it
phi-4-mini-instruct@8bit
unsloth-phi-4
lmstudio-community/phi-4
Enter custom model name
Skip (keep current)
Select terminal backend:
↑↓ navigate ENTER/SPACE select ESC cancel
(○) Local - run directly on this machine (default)
(○) Docker - isolated container with configurable resources
(○) Modal - serverless cloud sandbox
(○) SSH - run on a remote machine
(○) Daytona - persistent cloud development environment
(○) Vercel Sandbox - cloud microVM with snapshot filesystem persistence
(○) Singularity/Apptainer - HPC-friendly container
→ (●) Keep current (local)
messaging platformへの接続を求められます。今回はTelegramやDiscord(Slackなども含む)といったチャット・ツールからの利用は考えていないので、スキップします。
Connect a messaging platform? (Telegram, Discord, etc.)
↑↓ navigate ENTER/SPACE select ESC cancel
(●) Set up messaging now (recommended)
→ (○) Skip — set up later with 'hermes setup gateway'
色々と構成が実行され、最終的に構成が完了します。設定ファイルconfig.yamlを直接編集して設定を追加するため、setupはここで終了します。
────────────────────────────────────────────────────────────
🚀 Ready to go!
hermes Start chatting
hermes gateway Start messaging gateway
hermes doctor Check for issues
Launch hermes chat now? [Y/n]: n
hermes-agent %
記事「Claude CodeおよびOpenAI CodexでAgent Skillsを参照しMCPサーバー経由でOracle Databaseに問い合わせる」にて作成しているAgent Skillsを、作業ディレクトリにダウンロードします。
git clone https://github.com/ujnak/sh-sales-analysis.git
hermes-agent % git clone https://github.com/ujnak/sh-sales-analysis.git
Cloning into 'sh-sales-analysis'...
remote: Enumerating objects: 28, done.
remote: Counting objects: 100% (28/28), done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 28 (delta 3), reused 27 (delta 2), pack-reused 0 (from 0)
Receiving objects: 100% (28/28), 10.77 KiB | 5.39 MiB/s, done.
Resolving deltas: 100% (3/3), done.
hermes-agent %
このDockerコンテナで動作するHermes Agentが、Agent Skillsを参照するように設定します。
skills:
external_dirs: []
template_vars: true
inline_shell: false
inline_shell_timeout: 10
guard_agent_created: false
creation_nudge_interval: 15
external_dirsとして、/opt/data/sh-sales-analysis/.apm/skillsを追加します。ホスト上の作業ディレクトリは、コンテナから見ると/opt/data以下にマップされています。
skills:
external_dirs:
- /opt/data/sh-sales-analysis/.apm/skills
template_vars: true
inline_shell: false
inline_shell_timeout: 10
guard_agent_created: false
creation_nudge_interval: 15
ln -s ./sh-sales-analysis/.apm/instructions/sh-schema.instructions.md SOUL.md
hermes-agent % mv SOUL.md SOUL.md.bak
ynakakoshi@Ns-Macbook hermes-agent % ln -s ./sh-sales-analysis/.apm/instructions/sh-schema.instructions.md SOUL.md
hermes-agent %
mcp_servers:
ords-sampleserver:
url: "http://host.docker.internal:8181/ords/apexdev/sampleserver/mcp"
headers:
Authorization: "Bearer ${ORDS_OAUTH_ACCESS_TOKEN}"
enabled: true
timeout: 120
connect_timeout: 60
tools:
include: [ "get_schema", "run_sql", "get_current_user" ]
resources: false
prompts: false
mcp_servers:
ords-sampleserver:
url: "http://host.docker.internal:8181/ords/apexdev/sampleserver/mcp"
headers:
Authorization: "Bearer ${ORDS_OAUTH_ACCESS_TOKEN}"
enabled: true
timeout: 120
connect_timeout: 60
tools:
include: [ "get_schema", "run_sql", "get_current_user" ]
resources: false
prompts: false
# ── Fallback Model ────────────────────────────────────────────────────
# Automatic provider failover when primary is unavailable.
# Uncomment and configure to enable. Triggers on rate limits (429),
# overload (529), service errors (503), or connection failures.
#
docker run -it --rm \
-e ORDS_OAUTH_ACCESS_TOKEN=${ORDS_OAUTH_ACCESS_TOKEN} \
-v ${PWD}:/opt/data \
nousresearch/hermes-agent
/skills list --source local --enabled-only
────────────────────────────────────────
● mcpサーバーのords-sampleserverのツールget_schemaを呼び出して、スキーマSHの情報を表示して。
────────────────────────────────────────
┊ ⚡ preparing mcp_ords_sampleserver_get_schema…
┊ ⚡ mcp_ords_ 0.1s
╭─ ⚕ Hermes ────────────────────────────────────────────────────────────────────────────────────────╮
Oracle SH スキーマ概要
(取得元: mcp_ords_sampleserver_get_schema)
カテゴリ: ファクト
テーブル名: SH.SALES
主なカラム (抜粋): PROD_ID, CUST_ID, TIME_ID, CHANNEL_ID, PROMO_ID, QUANTITY_SOLD, AMOUNT_SOLD
コメント: 売上トランザクションの中心。すべての分析はここから開始
────────────────────────────────────────
カテゴリ:
テーブル名: SH.COSTS
主なカラム (抜粋): PROD_ID, UNIT_PRICE, UNIT_COST, CHANNEL_ID, PROMO_ID, TIME_ID
コメント: 商品コスト。粗利計算に必須
────────────────────────────────────────
カテゴリ:
テーブル名: SH.PROFITS
主なカラム (抜粋): CHANNEL_ID, TOTAL_COST, QUANTITY_SOLD, AMOUNT_SOLD, UNIT_PRICE, UNIT_COST,
TIME_ID, PROMO_ID, PROD_ID, CUST_ID
コメント: 売上・コストを結合したビュー的テーブル(分析で便利)
────────────────────────────────────────
カテゴリ: ディメンション
テーブル名: SH.PRODUCTS
主なカラム (抜粋): PROD_ID, PROD_NAME, PROD_DESC, PROD_CATEGORY, PROD_SUBCATEGORY,
PROD_LIST_PRICE
コメント: 商品情報・カテゴリ階層
────────────────────────────────────────
カテゴリ:
テーブル名: SH.CUSTOMERS
主なカラム (抜粋): CUST_ID, CUST_FIRST_NAME, CUST_LAST_NAME, COUNTRY_ID, CUST_INCOME_LEVEL,
CUST_CREDIT_LIMIT
コメント: 顧客属性
────────────────────────────────────────
カテゴリ:
テーブル名: SH.TIMES
主なカラム (抜粋): TIME_ID, CALENDAR_MONTH_DESC, FISCAL_YEAR, FISCAL_QUARTER_DESC,
WEEK_ENDING_DAY
コメント: 日付・会計情報
────────────────────────────────────────
カテゴリ:
テーブル名: SH.CHANNELS
主なカラム (抜粋): CHANNEL_ID, CHANNEL_DESC, CHANNEL_CLASS, CHANNEL_TOTAL
コメント: 販売チャネル
────────────────────────────────────────
カテゴリ:
テーブル名: SH.PROMOTIONS
主なカラム (抜粋): PROMO_ID, PROMO_NAME, PROMO_BEGIN_DATE, PROMO_END_DATE, PROMO_COST
コメント: プロモーション情報 (PROMO_ID=999 は「なし」)
────────────────────────────────────────
カテゴリ: 補助テーブル
テーブル名: SH.COUNTRIES
主なカラム (抜粋): COUNTRY_ID, COUNTRY_NAME, COUNTRY_REGION, COUNTRY_SUBREGION
コメント: 国・地域属性
────────────────────────────────────────
カテゴリ:
テーブル名: SH.SUPPLEMENTARY_DEMOGRAPHICS
主なカラム (抜粋): CUST_ID, GOLF, SOCCER, TENNIS, AFFINITY_CARD
コメント: 顧客の趣味・属性スコア
────────────────────────────────────────
カテゴリ:
テーブル名: SH.CAL_MONTH_SALES_MV / FWEEK_PSCAT_SALES_MV
主なカラム (抜粋): 集計ビュー:月次・週次売上金額 (DOLLARS)
コメント: 高速分析用マテリアライズドビュー
────────────────────────────────────────
カテゴリ:
テーブル名: その他(インデックス系テーブル等)
主なカラム (抜粋): DR$SUP_TEXT_IDX* 系列
コメント: テキスト検索インデックス(内部利用)
主要分析パターン例
分析目的: 売上トップ10商品
推奨SQL (スキーマ修飾必須): sql SELECT p.PROD_NAME, SUM(s.AMOUNT_SOLD) AS 売上合計 FROM
SH.SALES s JOIN SH.PRODUCTS p ON s.PROD_ID = p.PROD_ID GROUP BY p.PROD_NAME ORDER BY 売上合計
DESC FETCH FIRST 10 ROWS ONLY;
補足: FETCH FIRST … は Oracle 用の行数制限(ROWNUM <= 10 でも可)
────────────────────────────────────────
分析目的: チャネル別売上構成比
推奨SQL (スキーマ修飾必須): sql SELECT c.CHANNEL_DESC, SUM(s.AMOUNT_SOLD) AS 売上 FROM SH.SALES
s JOIN SH.CHANNELS c ON s.CHANNEL_ID = c.CHANNEL_ID GROUP BY c.CHANNEL_DESC;
補足: 構成比は結果を外部で計算、または SUM(s.AMOUNT_SOLD) / SUM(SUM(s.AMOUNT_SOLD)) OVER () 100
を使用
────────────────────────────────────────
分析目的: 前月比(売上)
推奨SQL (スキーマ修飾必須): sql SELECT t.CALENDAR_MONTH_DESC, SUM(s.AMOUNT_SOLD) AS 売上,
LAG(SUM(s.AMOUNT_SOLD)) OVER (ORDER BY t.CALENDAR_MONTH_DESC) AS 前月売上, CASE WHEN
LAG(SUM(s.AMOUNT_SOLD)) OVER (ORDER BY t.CALENDAR_MONTH_DESC) = 0 THEN NULL ELSE
(SUM(s.AMOUNT_SOLD) - LAG(SUM(s.AMOUNT_SOLD)) OVER (ORDER BY t.CALENDAR_MONTH_DESC)) /
LAG(SUM(s.AMOUNT_SOLD)) OVER (ORDER BY t.CALENDAR_MONTH_DESC) 100 END AS 前月比 FROM SH.SALES
s JOIN SH.TIMES t ON s.TIME_ID = t.TIME_ID GROUP BY t.CALENDAR_MONTH_DESC ORDER BY
t.CALENDAR_MONTH_DESC;
補足: 変化率は符号付きで表示
────────────────────────────────────────
分析目的: 粗利(商品別)
推奨SQL (スキーマ修飾必須): sql SELECT p.PROD_NAME, SUM(s.AMOUNT_SOLD) AS 売上合計,
SUM(s.QUANTITY_SOLD c.UNIT_COST) AS コスト合計, (SUM(s.AMOUNT_SOLD) - SUM(s.QUANTITY_SOLD
c.UNIT_COST)) AS 粗利 FROM SH.SALES s JOIN SH.PRODUCTS p ON s.PROD_ID = p.PROD_ID JOIN
SH.COSTS c ON s.PROD_ID = c.PROD_ID AND s.TIME_ID = c.TIME_ID AND s.CHANNEL_ID = c.CHANNEL_ID
AND s.PROMO_ID = c.PROMO_ID GROUP BY p.PROD_NAME ORDER BY 粗利 DESC FETCH FIRST 10 ROWS ONLY;
補足: SH.COSTS の結合キーは 4 列に注意
────────────────────────────────────────
分析目的: プロモーション効果比較
推奨SQL (スキーマ修飾必須): sql SELECT CASE WHEN s.PROMO_ID = 999 THEN 'なし' ELSE 'あり' END
AS プロモ区分, SUM(s.AMOUNT_SOLD) AS 売上合計 FROM SH.SALES s GROUP BY CASE WHEN s.PROMO_ID =
999 THEN 'なし' ELSE 'あり' END;
補足: PROMO_ID=999 を除外または明示区別
ポイントコメント
1. スキーマ修飾は必須 – 例: SH.SALES、SH.PRODUCTS のように必ずプレフィックスを付ける。
2. 日付フィルタは TIMES の文字列カラムか TIME_ID の DATE 型を使用。
- 月単位: WHERE t.CALENDAR_MONTH_DESC = '2001-06'
- 年単位: WHERE EXTRACT(YEAR FROM s.TIME_ID) = 2001
3. 行数制限は ROWNUM <= N または Oracle 12c+ の FETCH FIRST N ROWS ONLY。
4. プロモーションなしは 999 に固定 – 分析時に除外・区別を忘れずに。
5. 粗利計算は SH.COSTS と 4 列 (PROD_ID, TIME_ID, CHANNEL_ID, PROMO_ID) の完全一致で結合。キーが揃わないと正しいコストが取得できません。
次のステップ例
- 上記サンプルSQLを実行し、興味ある指標(売上推移・チャネル別シェアなど)を具体的に取得。
- 必要なら期間やフィルタ条件(例: WHERE t.FISCAL_YEAR = 2003) を追加して、レポートに合わせたカスタマイズを行う。
ご要望があれば、特定の指標や期間に絞ったSQLを作成して実行結果をご提示します。
╰───────────────────────────────────────────────────────────────────────────────────────────────────╯
────────────────────────────────────────
● このスキーマにアクセスして、販売分析を実行して。
────────────────────────────────────────
┊ ⚡ preparing mcp_ords_sampleserver_run_sql…
┊ ⚡ mcp_ords_ 0.2s
┊ ⚡ preparing mcp_ords_sampleserver_run_sql…
┊ ⚡ mcp_ords_ 0.1s
┊ ⚡ preparing mcp_ords_sampleserver_run_sql…
┊ ⚡ mcp_ords_ 0.1s
┊ ⚡ preparing mcp_ords_sampleserver_run_sql…
┊ ⚡ mcp_ords_ 0.1s
╭─ ⚕ Hermes ────────────────────────────────────────────────────────────────────────────────────────╮
SH スキーマ販売分析結果
| 項目 | 結果 |
|--------------|---------------|
| 全体売上金額 | 98,205,831.21 |
| 全体販売数量 | 918,843 |
上位 10 商品 (売上金額)
| ランク | 商品名 | 売上金額 |
|--------|-----------------------------------------|---------------|
| 1 | Lithium Electric Golf Caddy | 15,011,642.52 |
| 2 | Soccer Goal - Official | 8,314,815.40 |
| 3 | Pitching Machine and Batting Cage Combo | 7,189,171.77 |
| 4 | Match Used Autograph Racquet | 6,691,996.81 |
| 5 | Soccer Goal - Portable | 6,312,268.40 |
| 6 | Right-Handed Graphite Shaft Iron Set | 5,635,963.08 |
| 7 | Speed Trainer Bats and Training Program | 5,498,727.81 |
| 8 | Limited Edition Racquet | 3,845,387.38 |
| 9 | Team shirt | 3,721,699.61 |
| 10 | English Willow Cricket Bat | 3,543,725.89 |
チャネル別売上構成
| チャネル | 売上金額 |
|--------------|---------------|
| Direct Sales | 57,875,260.60 |
| Partners | 26,346,342.32 |
| Internet | 13,706,802.03 |
| Tele Sales | 277,426.26 |
> ポイント
> - Direct Sales が全体の約 59% を占め、最も重要な販売経路です。
> - Tele Sales は僅か 0.3% と極めて低いので、リソース再分配の検討余地があります。
月次売上推移(2019‑01〜2020‑03)
| カレンダーメンバー | 売上金額 |
|--------------------|--------------|
| 2019‑01 | 2,277,420.49 |
| 2019‑02 | 2,372,690.87 |
| 2019‑03 | 1,830,572.64 |
| 2019‑04 | 1,975,978.30 |
| 2019‑05 | 1,748,287.23 |
| 2019‑06 | 1,869,728.61 |
| 2019‑07 | 1,932,282.28 |
| 2019‑08 | 1,972,532.63 |
| 2019‑09 | 2,167,008.19 |
| 2019‑10 | 2,236,464.53 |
| 2019‑11 | 1,959,664.22 |
| 2019‑12 | 1,741,284.96 |
| 2020‑01 | 2,077,439.76 |
| 2020‑02 | 2,357,629.26 |
| 2020‑03 | 1,658,678.19 |
> ポイント
> - 売上は季節変動が見られ、特に 2 月と 10 月がピークです。
> - 2020‑02 の増加はプロモーションや新商品投入が影響した可能性があります(要因分析可)。
次にやると有益な分析例
1. 前月比・前年比の変化率(ウィンドウ関数 LAG を使用)
2. 粗利分析(SH.COSTS と 4 列結合で商品別粗利を算出)
3. プロモーション効果比較(PROMO_ID = 999 を除外し、あり/なしで売上比較)
ご要望があれば、上記のいずれかを実装した SQL を作成し結果をご提示します。
╰───────────────────────────────────────────────────────────────────────────────────────────────────╯
⚕ gpt-oss-120b │ 20.7K/131.1K │ [██░░░░░░░░] 16% │ 10m │ ⏲ 4m 46s
─────────────────────────────────────────────────────────────────────────────────────────────────────
❯
─────────────────────────────────────────────────────────────────────────────────────────────────────
今回の記事は以上になります。






