ORDS: now a streaming HTTP MCP Server for Oracle Database
- ORDSはスタンドアロンであること。WebLogicやTomcatへのデプロイは不可。
- データベースのスキーマに直接接続する。APEXやRESTサービスの呼び出しのように、プロキシ接続はしない。
- スキーマORDS_METADATAをデータベースにインストールしなくてもよい。
- 認可にOAuth 2.0を使用するため、OAuth 2.0/OIDC対応認可サーバーの構成が必要。
Installation and Configuration Guide
3 Configuring Model Context Protocol (MCP)
Oracle Database Free
% mkdir -p ords-mcp2
% cd ords-mcp2
ords-mcp2 %
ords-mcp2 % sql hr@localhost/freepdb1
SQLcl: 火 7月 07 10:36:36 2026のリリース26.1 Production
Copyright (c) 1982, 2026, Oracle. All rights reserved.
パスワード (**********?) ******
接続先:
Oracle AI Database 26ai Free Release 23.26.2.0.0 - Develop, Learn, and Run for Free
Version 23.26.2.0.0
SQL>
docker buildx build --platform linux/arm64 --load -t ords:26.2-jdk25 .
ords-mcp2 % docker buildx build --platform linux/arm64 --load -t ords:26.2-jdk25 .
[+] Building 196.3s (15/15) FINISHED docker:colima
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 4.66kB 0.0s
=> [internal] load metadata for container-registry.oracle.com/java/jdk-n 2.6s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [ 1/11] FROM container-registry.oracle.com/java/jdk-no-fee-term:25.0 62.6s
=> => resolve container-registry.oracle.com/java/jdk-no-fee-term:25.0.3- 0.0s
=> => sha256:a87cab8ce0241264ec70ecd357271d16ce9d4b 215.41MB / 215.41MB 61.5s
=> => sha256:849b9039d2ad02b8dc03e66b9b808816d12d8cb8a 16.22kB / 16.22kB 0.4s
=> => sha256:a8a0fb099610f2281c99dee54da3dedcc313b1738 12.25MB / 12.25MB 3.8s
=> => sha256:312cc07da4b871d4fb2e1dc4aa27242f74100ced 92.42MB / 92.42MB 23.5s
=> => extracting sha256:312cc07da4b871d4fb2e1dc4aa27242f74100ced7570c762 0.9s
=> => extracting sha256:a8a0fb099610f2281c99dee54da3dedcc313b17385fa1661 0.1s
=> => extracting sha256:a87cab8ce0241264ec70ecd357271d16ce9d4be5168571d9 1.0s
=> => extracting sha256:849b9039d2ad02b8dc03e66b9b808816d12d8cb8a461238e 0.0s
=> [ 2/11] RUN dnf -y update && dnf -y install unzip curl sudo epel-re 68.9s
=> [ 3/11] RUN curl -o /etc/yum.repos.d/openresty2.repo https://openrest 0.9s
=> [ 4/11] RUN dnf -y -q install certbot openresty && dnf clean all & 16.4s
=> [ 5/11] RUN groupadd -g 54321 oinstall && useradd -u 54321 -g oinsta 0.1s
=> [ 6/11] RUN mkdir -p /opt/oracle/ords /etc/ords/config 0.1s
=> [ 7/11] RUN cat <<'EOF' > /usr/local/openresty/nginx/conf/nginx.conf 0.1s
=> [ 8/11] RUN chown -R oracle:oinstall /usr/local/openresty 0.2s
=> [ 9/11] RUN curl -o /tmp/ords.zip https://download.oracle.com/otn_so 33.5s
=> [10/11] WORKDIR /home/oracle 0.0s
=> [11/11] RUN cat <<'EOF' > /home/oracle/start.sh && chmod +x /home/ora 0.1s
=> exporting to image 10.7s
=> => exporting layers 8.4s
=> => exporting manifest sha256:91b60d9e3128b910d73f67df4c42fdab5372d981 0.0s
=> => exporting config sha256:062941d460df163aa6311c885ad93b3155d04028c5 0.0s
=> => exporting attestation manifest sha256:be2a5ef1192a9827c828f1f33a34 0.0s
=> => exporting manifest list sha256:f821fdf1a4b8dc84e7e89d9dbf762dbf0f7 0.0s
=> => naming to docker.io/library/ords:26.2-jdk25 0.0s
=> => unpacking to docker.io/library/ords:26.2-jdk25 2.3s
ords-mcp2 %
作成したコンテナ・イメージより、MCPサーバーをコンテナords-mcpとして実行します。
ords-mcp2 % mkdir ords-config
ords-mcp2 %
docker run -d --rm --name ords-mcp -p 8585:8585 -v ${PWD}/ords-config:/etc/ords/config ords:26.2-jdk25
リバース・プロキシを介さずORDS MCPサーバーに直結したい場合は、ホストの8585にコンテナ内の8080番ポートを割り当てます。(MCP InspectorとAuth0の組み合わせでは、うまく動作しません。)
ords-mcp2 % docker run -d --rm --name ords-mcp -p 8585:8585 -v ${PWD}/ords-config:/etc/ords/config ords:26.2-jdk25
18a6f514d0469bd8a1e60ec4cad621bcb8d74477fd74abf048d264ecfd72a8da
ords-mcp2 %
作成をクリックします。
基本情報のドメインとクライアントIDは、MCPサーバーへのアクセスに使用するため、メモしておきます。クライアント・シークレットを参照することはありません。
mcp.security.jwt.profile.issuer: https://ドメイン/
mcp.security.jwt.profile.authorization.server.url: https://ドメイン
JSON Web Token (JWT) プロファイルおよびJSON Web Token (JWT) の署名アルゴリズムはデフォルトをそのまま採用します。
以上で作成します。
設定をスクロールし、RBACの設定に移動します。
RBACを有効化をオン、アクセストークンに権限を追加するをオンに変更します。
必ずしも必要ではありませんが、アクセスの設定のユーザー同意のスキップを許可するをオフにしています。
以上で変更を保存します。
exports.onExecutePostLogin = async (event, api) => {
const namespace = 'http://localhost:8585/mcp';
if (event.authorization) {
api.idToken.setCustomClaim(`roles2`, event.authorization.roles);
api.accessToken.setCustomClaim(`roles2`, event.authorization.roles);
}
};
ords-mcp2 % docker exec -it ords-mcp bash
[oracle@c68b1bf8aa17 ~]$
ords --config /etc/ords/config config set --global feature.mcp true
ords --config /etc/ords/config config set --global mcp.security.jwt.profile.issuer https://[Domain]/
ords --config /etc/ords/config config set --global mcp.security.jwt.profile.audience http://localhost:8585/mcp
ords --config /etc/ords/config config set --global mcp.security.jwt.profile.jwk.url https://[Domain]/.well-known/jwks.json
ords --config /etc/ords/config config set --global mcp.security.jwt.profile.authorization.server.url https://[Domain]
ords --config /etc/ords/config config set --global mcp.security.jwt.profile.role.claim.name /roles2
ords --config /etc/ords/config config --db-pool mcp-hr set db.connectionType basic
ords --config /etc/ords/config config --db-pool mcp-hr set db.hostname host.docker.internal
ords --config /etc/ords/config config --db-pool mcp-hr set db.port 1521
ords --config /etc/ords/config config --db-pool mcp-hr set db.servicename freepdb1
ords --config /etc/ords/config config --db-pool mcp-hr set db.username HR
ords --config /etc/ords/config config --db-pool mcp-hr set db.description "Sample Schema Human Resources"
ords --config /etc/ords/config config --db-pool mcp-hr set mcp.role ORDS_MCP_HR
ords --config /etc/ords/config config --db-pool mcp-hr secret db.password
[oracle@c68b1bf8aa17 ~]$ ords --config /etc/ords/config config --db-pool mcp-hr secret db.password
ORDS: Release 26.2 Production on Tue Jul 07 05:44:58 2026
Copyright (c) 2010, 2026, Oracle.
Configuration:
/etc/ords/config
Enter the database password: ********
Confirm password: ********
The setting named: db.password was set to: ****** in configuration: mcp-hr
[oracle@c68b1bf8aa17 ~]$
[oracle@c68b1bf8aa17 ~]$ exit
exit
ords-mcp2 % docker restart ords-mcp
ords-mcp
ords-mcp2 %
npx @modelcontextprotocol/inspector












































