sqlanywhere-mcp について
sqlanywhere-mcp は、MCP クライアントから SAP SQL Anywhere 17 データベースへ接続するオープンソースの MCP サーバーです。データベースの調査や読み取り専用クエリを目的とし、スキーマ情報やストアドプロシージャへのアクセスを設定できます。
主な機能
- 01設定済みデータベースへの接続
- 02スキーマ・ビュー・トリガーの調査
- 03オブジェクト定義の一覧と取得
- 04読み取り専用クエリの実行
- 05呼び出し可能なプロシージャの制限
活用シーン
- 01MCP クライアントからのデータベースオブジェクト調査
- 02ストアドプロシージャやビューの確認
- 03SQL Anywhere 17 への読み取り専用 SQL クエリ
MCP 対応
データベース一覧、スキーマ調査、クエリ、プロシージャ呼び出しのツールを MCP クライアントに公開します。ODBC ドライバーを介して SAP SQL Anywhere 17 に接続します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
SQL Anywhere 17 向けの MCP(Model Context Protocol)サーバーです。Claude Code や Claude Desktop などの MCP クライアントから SQL Anywhere データベースに直接クエリを実行し、スキーマ、ストアドプロシージャ、トリガー、ビューを調べられます。Windows、Linux、macOS で動作します。
免責事項: sqlanywhere-mcp は、独立したコミュニティによるオープンソースプロジェクトです。SAP SE とは提携しておらず、同社から推奨または後援を受けていません。SAP および SQL Anywhere は、SAP SE の商標または登録商標です。sqlanywhere-mcp は SAP のソフトウェアを含まず、再配布もしていません。
目次
前提条件
- sqlanywhere-mcp を実行するマシンに SQL Anywhere 17 ODBC ドライバーをインストールしてください。実行環境に対応した SQL Anywhere 17 クライアントまたはサーバーのインストールに含まれています。
- Linux および macOS では、ODBC ドライバーマネージャーが必要です:unixODBC(例:
apt install unixodbc、dnf install unixODBC、brew install unixodbc)。Windows ではドライバーマネージャーが組み込まれています。 - ソースからビルドする場合は .NET 10 SDK が必要です。
- Claude Code や Claude Desktop などの MCP クライアント。
sqlanywhere-mcp 自体は、プラットフォーム固有のコードを含まない .NET アプリケーションです。プラットフォームごとに異なるのはドライバーの登録方法で、その設定についてはODBC ドライバーの設定で説明します。
ODBC ドライバーのセットアップ
sqlanywhere-mcp は、Windows インストーラーが登録する名前である SQL Anywhere 17 という名前の ODBC ドライバーに接続します。ドライバーが別の名前で登録されている場合は、driver 設定(フィールドを参照)を使用してください。
- Windows: SQL Anywhere 17 のインストール後に必要な作業はありません。
- Linux および macOS: unixODBC にドライバーを認識させる必要があります。
odbcinst.iniにSQL Anywhere 17という名前で登録するか、config.jsonのdriverにドライバーライブラリのパスを設定してください。たとえば/opt/sqlanywhere17/lib64/libdbodbc17.soのように指定します(パスは SQL Anywhere のインストール場所によって異なります)。また、ドライバー自身のライブラリも読み込み可能である必要があります。そのために SQL Anywhere が提供するsa_config.shスクリプトを、MCP クライアントの起動前に source できます。お使いのプラットフォームに関する詳細は、SAP のドキュメントを参照してください。
接続に失敗すると、ツールのエラーに使用したドライバー名が表示されるため、ドライバー名が間違っている場合やドライバーが見つからない場合は、クライアントで確認できます。
インストール
sqlanywhere-mcp を入手する方法は 3 つあります。いずれの方法でも同じサーバーを利用できます。このサーバーには、上記の前提条件(ODBC ドライバー、および Linux と macOS では unixODBC)が必要です。
NuGet から
SqlAnywhereMcp パッケージは、各プラットフォーム(win-x64、linux-x64、linux-arm64、osx-x64、osx-arm64)向けの自己完結型ビルドを備えた .NET ツールなので、実行に .NET ランタイムは不要です。インストールには dnx と dotnet tool を含む .NET 10 SDK が必要です。
インストールせずに実行します。通常、MCP クライアントではこの方法を使います。
dnx SqlAnywhereMcp --yes
または、グローバルツールとしてインストールすると、sqlanywhere-mcp が PATH に追加されます。
dotnet tool install --global SqlAnywhereMcp
事前に何もインストールせずに Claude Code に登録するには、次のようにします。
claude mcp add --transport stdio --scope user sqlanywhere -- dnx SqlAnywhereMcp --yes
リリースから
各 GitHub リリースには、自己完結型の実行ファイルを含むプラットフォームごとのアーカイブと、SHA256SUMS ファイルがあります。お使いのプラットフォーム用のアーカイブを PATH 上の任意の場所に展開し、sha256sum -c SHA256SUMS で検証してください。実行ファイルにはコード署名がないため、初回起動時に macOS Gatekeeper や Windows SmartScreen が警告を表示する場合があります。
ソースから
通常のユーザーアカウントで、お使いのプラットフォーム用のインストールスクリプトを実行してください(管理者権限は不要です)。各スクリプトは自己完結型の実行ファイルを発行するため、実行に .NET ランタイムは不要です。
Windows(PowerShell):
.\install.ps1
sqlanywhere-mcp.exe を %LOCALAPPDATA%\sqlanywhere-mcp\ に発行し、そのディレクトリをユーザーの PATH に追加して、Claude Code にサーバーを登録するコマンドを表示します。
| オプション | 説明 |
|---|---|
-Configuration Release | ビルド構成(既定値:Release) |
-Configuration Debug | Debug モードでビルドします |
-Help | ヘルプを表示します |
Linux および macOS(bash):
./install.sh
プラットフォーム(linux-x64、linux-arm64、osx-x64、osx-arm64 のいずれか)を判別し、sqlanywhere-mcp を ~/.local/bin/ に発行して、Claude Code にサーバーを登録するコマンドを表示します。-c Debug を指定すると、Debug モードでビルドします。
ドライバーのアーキテクチャは、実行ファイルのアーキテクチャと一致している必要があります。SQL Anywhere 17 のドライバーが x64 のみの場合は、x64 ビルドを使用してください(Apple シリコンでは、x64 ビルドは Rosetta 上で動作します)。
任意のプラットフォームで手動で行う場合:
dotnet publish src/SqlAnywhereMcp -c Release -r <rid> --self-contained -o <output-dir>
ここで <rid> は、win-x64、linux-x64、osx-x64 などの .NET ランタイム識別子です。
設定
ファイルの場所
| プラットフォーム | パス |
|---|---|
| Windows | %APPDATA%\sqlanywhere-mcp\config.json |
| Linux / macOS | $XDG_CONFIG_HOME/sqlanywhere-mcp/config.json、または XDG_CONFIG_HOME が設定されていない場合は ~/.config/sqlanywhere-mcp/config.json |
初回起動時にファイルがない場合、サンプルが自動的に作成されます。ファイルを編集して sqlanywhere-mcp を一度再起動してください。それ以降は再起動しなくても変更が反映されます(ライブリロードを参照)。
設定例:
{
"defaults": {
"username": "dba",
"passwordCommand": "keyturn get dev-db --refresh"
},
"allowedProcedures": [],
"defaultDatabase": "demo",
"databases": {
"demo": { "host": "localhost", "database": "demodb" },
"staging": {
"host": "db.example.com",
"port": 2700,
"database": "stagingdb",
"passwordCommand": "keyturn get staging-db --refresh",
"allowedProcedures": ["dbo.sa_conn_info"]
}
}
}
認識されないフィールドは拒否されるため、フィールド名の誤記(たとえば allowedProcedure)は無視されずに報告されます。
フィールド
トップレベル:
| フィールド | 必須 | 説明 |
|---|---|---|
databases | はい | ツールが接続できるデータベース。名前をキーとして指定します。この名前はツールの database 引数として使用され、大文字と小文字を区別せず一意である必要があります。空のオブジェクトも有効です。その場合、ツールはデータベースが設定されていないことを報告します。以下のフィールドを参照してください |
defaults | いいえ | 各データベースが個別に設定しない場合に使用する値です。以下のフィールドを参照してください |
defaultDatabase | いいえ | database を指定せずにツールを呼び出した場合に使用するデータベース名です。データベースが1つの場合は不要です |
allowedProcedures | いいえ | 各データベースで call_procedure が呼び出せるストアドプロシージャ。owner.procedure の形式で指定します(デフォルト:なし)。プロシージャ呼び出しを参照してください |
defaults:
| フィールド | デフォルト | 説明 |
|---|---|---|
username | - | ログインユーザー名です。ここ、または各データベースで必須です |
passwordCommand | - | 認証情報ヘルパーです。データベースのパスワードを出力するコマンドを指定します。ここ、または各データベースで必須です。データベースのパスワードを参照してください |
appInfo | - | ODBC パラメーター AppInfo の値です。SQL Anywhere が接続中のアプリケーションを識別するために使用します(例:my-app) |
driver | SQL Anywhere 17 | ドライバーマネージャーに登録された ODBC ドライバー名、またはドライバーライブラリのパスです。ODBC ドライバーの設定を参照してください |
port | 2638 | データベースの TCP ポートです(SQL Anywhere の標準ポート) |
各データベース:
| フィールド | 必須 | 説明 |
|---|---|---|
host | はい | SQL Anywhere サーバーのホスト名です |
database | はい | データベース名(ODBC パラメーター DBN)です |
port | いいえ | defaults.port を上書きします |
username | いいえ(defaults にない場合は必須) | defaults.username を上書きします |
passwordCommand | いいえ(defaults にない場合は必須) | 異なる認証情報を使用するデータベースの場合、defaults.passwordCommand を上書きします |
appInfo | いいえ | defaults.appInfo を上書きします |
driver | いいえ | defaults.driver を上書きします |
allowedProcedures | いいえ | トップレベルで指定したものに加えて、このデータベースで call_procedure が呼び出せるプロシージャです |
ライブリロード
sqlanywhere-mcp は、ツールを呼び出すたびに config.json を確認します。ファイルが変更されており、有効な内容であれば、次の呼び出しからその設定が使われます。追加したデータベースは利用可能になり、削除したデータベースは利用できなくなります。また、開いている接続は閉じられ、新しい設定で再接続されます。sqlanywhere-mcp や Claude Code の再起動は不要です。
変更後のファイルが無効な場合(JSON の形式が不正、認識されないフィールドがある、名前が重複している、プロシージャ名が不正など)、または削除された場合、sqlanywhere-mcp は最後に有効だった設定を使い続けます。list_databases は reloadError にエラーを報告します。また、そのエラーは sqlanywhere-mcp の標準エラー出力にも書き込まれ、MCP クライアントのログに表示されます。ファイルを修正するとエラーは解消されます。
起動時の初回読み込みでは、引き続き厳格な検証が行われます。その時点でファイルが無効な場合、sqlanywhere-mcp はエラーで終了します。
データベースのパスワード
sqlanywhere-mcp はデータベースのパスワードを保存しません。認証情報ヘルパーパターンに従い、passwordCommand は標準出力にパスワードを出力するコマンドです。sqlanywhere-mcp は接続を開くたびにこのコマンドを実行するため、ローテーションされるパスワードは次回の再接続時に反映されます。
ヘルパーの仕様は次のとおりです。
- stdout にはパスワードだけを出力します。末尾の改行は無視されます。
- 成功時は
0で終了します。それ以外の終了コードの場合、接続に失敗し、ツールはコマンドと終了コードを示すエラーを返します。 - 診断情報は stderr に出力します。sqlanywhere-mcp はその内容を自身の stderr に転送し、MCP クライアントはログに表示します。
- シェルを介さず、入力なしで実行されます(stdin は閉じられます)。スペースを含む引数は引用符で囲んでください。
pass show sqlanywhere/dev、secret-tool lookup service sqlanywhere、または独自の簡単なスクリプトなど、この仕様に従うヘルパーであれば使用できます。
推奨ヘルパー:keyturn
keyturn は、OS の認証情報ストア(Windows Credential Manager、macOS Keychain、Linux Secret Service)にローテーションされるシークレットを保存し、有効期限が切れたときに新しい値を求めます。このパターンを前提に設計されており、keyturn get NAME はシークレットを出力し、シークレットが古いか存在しない場合は --refresh によってプロンプトを表示し、新しい値で処理を続行します。初回設定は次のとおりです。
keyturn add dev-db daily@06:00 "SQL Anywhere dev password"
keyturn set dev-db
"passwordCommand": "keyturn get dev-db --refresh"
keyturn は Windows、Linux、macOS で動作します。コマンドは sqlanywhere-mcp と同じ OS 上で実行されるため、その OS に keyturn をインストールし、そのシステムの PATH に含まれていることを確認してください。たとえば、Claude Code が WSL2 内で実行されているものの、Windows の sqlanywhere-mcp.exe を起動する場合、ヘルパーは Windows 版となり、Windows Credential Manager を読み取ります。
別の認証情報を使用するデータベースでは、独自の passwordCommand を指定して別のシークレットを参照でき、defaults.passwordCommand が上書きされます。
config.jsonにパスワードが含まれることはありません。passwordフィールドを含む設定ファイルはエラーで拒否されます。
Claude Code との連携
プラグインとして
このリポジトリは Claude Code プラグインマーケットプレイスでもあります。プラグインがサーバーを登録し、dnx SqlAnywhereMcp --yes で実行するため、.NET 10 SDK が必要で、公開済みの最新パッケージが常に使用されます。プラグインは config.json を作成しません。設定を参照してください。
プラグインは Claude Code が実行されているマシン上でサーバーを起動します。WSL2 内では dnx が Linux 上で実行されるため、WSL2 に独自の .NET 10 SDK と Linux ODBC ドライバーが必要です。WSL2 から Windows のインストールを使用するには、プラグインを使わず、WSL2 内の Claude Codeの説明に従ってサーバーを手動で登録してください。
claude plugin marketplace add Dwarf1er/sqlanywhere-mcp
claude plugin install sqlanywhere@sqlanywhere-mcp
手動での設定
インストールスクリプトの実行の最後に、正確なコマンドが表示されます。--scope user フラグを指定すると、すべてのプロジェクトでサーバーがグローバルに登録されます。
Linux および macOS - 任意のターミナルから実行します:
claude mcp add --transport stdio --scope user sqlanywhere \
~/.local/bin/sqlanywhere-mcp
Windows - 任意のターミナルから実行します:
claude mcp add --transport stdio --scope user sqlanywhere `
"C:\Users\<username>\AppData\Local\sqlanywhere-mcp\sqlanywhere-mcp.exe"
WSL2 内の Claude Code - データベースの実行場所に応じてビルドを選択します:
- Windows 上のデータベース(または Windows 側を経由してアクセスするデータベース):WSL2 から相互運用機能を使って Windows ビルドを実行します。Windows ドライバーを使用し、stdio は透過的に動作します。方法は 2 つあります:
- Windows の .NET ツール(Windows で
dotnet tool install --global SqlAnywhereMcpを実行)。%USERPROFILE%\.dotnet\toolsにsqlanywhere-mcp.cmdランチャーがインストールされます。WSL2 から.cmdファイルを直接実行できないため、cmd.exe経由で実行します:claude mcp add --transport stdio --scope user sqlanywhere \ -- cmd.exe /d /c 'C:\Users\<username>\.dotnet\tools\sqlanywhere-mcp.cmd'.dotnet\tools\.store\sqlanywheremcp\<version>\内の実行ファイルは指定しないでください。パスにバージョンが含まれているため、dotnet tool updateのたびに動作しなくなります。.cmdランチャーならそのまま使い続けられます。 - Windows インストールスクリプトでインストールした実行ファイル。これは WSL2 から直接実行できます:
claude mcp add --transport stdio --scope user sqlanywhere \ /mnt/c/Users/<username>/AppData/Local/sqlanywhere-mcp/sqlanywhere-mcp.exe
- Windows の .NET ツール(Windows で
- WSL2 の Linux 内のデータベース:上記の Linux の場合と同様に、WSL2 内で Linux プログラムとしてインストールして実行します。その場合、WSL2 内に Linux 用 SQL Anywhere 17 ドライバーと unixODBC が必要です。
2 つのビルドは設定を共有しません。Windows ビルドは Windows の設定と認証情報ヘルパーを読み込み、Linux ビルドは WSL2 内の設定を読み込みます。
設定を反映するには、Claude Code を再起動してください。MCP サーバーは Claude Code の起動時に自動的に起動します。
Claude Desktop との連携
Claude Desktop は MCP サーバーの一覧を claude_desktop_config.json から読み込みます。Settings > Developer > Edit Config から開きます(ファイルがまだ存在しない場合は作成されます)。mcpServers の下にエントリーを追加します:
{
"mcpServers": {
"sqlanywhere": {
"command": "C:\\Users\\<username>\\AppData\\Local\\sqlanywhere-mcp\\sqlanywhere-mcp.exe"
}
}
}
macOS では、代わりにインストールした実行ファイルのパスを使用します。例:/Users/<username>/.local/bin/sqlanywhere-mcp
mcpServers の下にすでに他のエントリーがある場合は、それらと並べて sqlanywhere を追加するだけです。
ファイルを保存し、Claude Desktop を完全に再起動します(ウィンドウを閉じるだけでなく、アプリを終了してください)。接続を確認するには、チャットボックスの「+」ボタンをクリックして「Connectors」を選択します。sqlanywhere が、利用可能なツールとともに表示されるはずです。接続に失敗した場合は、Settings > Developer でログを確認してください。
複数のデータベース
1 つの config.json の databases の下に、各データベースを名前をキーとして一覧表示します(設定を参照)。各ツールでは、使用するデータベース名を指定する database 引数を省略できます。省略した場合、ツールは defaultDatabase を使用します。データベースが 1 つだけの場合は、そのデータベースを使用します。list_databases は、存在するデータベース名を一覧表示します。
SQLANYWHERE_MCP_CONFIG 環境変数でそれぞれ独自の設定ファイルを指定して sqlanywhere-mcp を複数回登録する方法も引き続き使えます。データベースを完全に分離したい場合、たとえば本番環境用に別のサーバーエントリーを設ける場合にのみ有用です:
claude mcp add --transport stdio --scope user sqlanywhere-prod \
--env SQLANYWHERE_MCP_CONFIG=~/.config/sqlanywhere-mcp/prod.json \
-- ~/.local/bin/sqlanywhere-mcp
SQLANYWHERE_MCP_CONFIG が設定されていない場合、サーバーはデフォルトの設定パスを使用します。
利用可能なツール
ツール名は、クライアントに表示される形式として snake_case を使用します(例:list_databases)。call_procedure を除くすべてのツールには、読み取り専用、冪等、クローズドワールドを示す注釈(readOnlyHint、idempotentHint、openWorldHint)が付いているため、MCP クライアントはプロンプトなしで承認できます。call_procedure には、読み取り専用ではなく破壊的であることを示す注釈が付いています。失敗は MCP ツールエラー(isError)として返され、理由がメッセージに含まれます。
すべてのツールは outputSchema を宣言し、結果を structuredContent として返します(構造化出力を無視するクライアント向けに、同じ JSON がテキストコンテンツにも含まれます)。ほとんどのツールは { "rows": [...], "truncated": bool, "count": int } を返します。各行は、列名をキーとするオブジェクトです。explain_query は { "query", "plan", "estimatedRows", "estimatedTime" } を返し、list_databases はデータベースと設定ステータスを返します。
ツール呼び出しはキャンセルできます。クライアントがリクエストをキャンセルすると、sqlanywhere-mcp は実行中のステートメントを停止するようデータベースに要求し、実行中のパスワードコマンドも停止します。
list_databases を除く以下のすべてのツールは、オプションの database パラメーターも受け取ります。このパラメーターには、list_databases に表示される使用するデータベース名を指定します。指定しない場合、ツールはデフォルトのデータベースを使用します。このパラメーターは以下の表では省略しています。
データベース
list_databases
設定済みデータベースの名前、ホスト、ポート、データベース名、ユーザー名、および各データベースで call_procedure が呼び出せるプロシージャを一覧表示します。また、デフォルトのデータベース、設定ファイルのパス、最後に config.json を変更した際に読み込みに失敗した場合の reloadError も表示します。
クエリの実行
execute_query
読み取り専用 SQL クエリを実行し、結果を JSON として返します。受け付けるのは SELECT および WITH ステートメントのみです。複数ステートメントを含むクエリ(;)と SELECT ... INTO は拒否されます。実行に 60 秒を超えるクエリはキャンセルされます。
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
sql | string | - | 実行する SQL クエリ |
maxRows | int | 500 | 返される行の最大数(最大 10000) |
結果が maxRows を超えると、レスポンスの truncated フラグは true に設定されます。また、返された行数を示す count フィールドも含まれます。
explain_query
読み取り専用 SQL クエリ(SELECT または WITH のみ)の実行計画を返します。
| パラメーター | 型 | 説明 |
|---|---|---|
sql | string | 実行計画を取得する SQL クエリ |
describe_query
クエリを実行せずに、読み取り専用クエリの結果セットを説明します(sa_describe_query)。各列の名前、データ型、NULL 許容性、および参照元のテーブル列を示します。execute_query と同じ読み取り専用チェックが適用されます。
| パラメーター | 型 | 説明 |
|---|---|---|
sql | string | 説明する SELECT または WITH クエリ |
所有者
list_owners
データベース内で少なくとも 1 つのテーブルまたはビューを所有する、すべての一意な所有者(ユーザー)を一覧表示します。
スキーマの調査
list_tables
すべてのベーステーブルとビューについて、種類と所有者を一覧表示します。
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
owner | string | - | 特定の所有者に結果を絞り込みます |
nameFilter | string | - | 名前を検索するための SQL LIKE パターン(例:cust%、%order%) |
describe_table
テーブルの列定義を返します。内容は、名前、型、長さ、NULL 許容性、デフォルト値、主キーのフラグ、コメントです。
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
tableName | string | - | テーブル名 |
owner | string | - | 同じテーブル名を複数の所有者が使用している場合に区別するための所有者名 |
list_check_constraints
テーブルのすべてのチェック制約について、名前と定義を一覧表示します。
| パラメーター | 型 | 説明 |
|---|---|---|
tableName | string | テーブル名 |
list_indexes
テーブルのすべてのインデックスを一覧表示します。主キー、外部キー、セカンダリインデックス、テキストインデックスについて、一意性と対象となる列の順序を示します(降順の列には desc が付きます)。
| Parameter | Type | Default | Description |
|---|---|---|---|
tableName | string | - | テーブル名 |
owner | string | - | 同じテーブル名を複数の所有者が共有している場合に区別するための所有者名 |
list_foreign_keys
データベース内のすべての外部キーを一覧表示します。ロール名、子テーブル、親テーブル、対応する列を示します。
| Parameter | Type | Default | Description |
|---|---|---|---|
tableName | string | - | 特定の子(参照元)テーブルに絞り込みます |
get_table_definition
データベースがテーブルに対して生成する CREATE ステートメント(sa_get_table_definition)を返します。テーブルとその列、キー、外部キー、使用するシーケンス、付与された権限が含まれます。
トリガーとコメントは、デフォルトでは含まれません。大きなトリガーがいくつかあるテーブルでは、各トリガーが定義と保持された元のソースの2回出力されるため、1回の呼び出しで MCP クライアントが受け入れられる量を超える可能性があります。トリガーとコメントは、それぞれ get_trigger_source と get_table_comments で個別に取得できます。
| Parameter | Type | Default | Description |
|---|---|---|---|
tableName | string | - | テーブル名 |
owner | string | - | 同じテーブル名を複数の所有者が共有している場合に区別するための所有者名 |
includeTriggers | bool | false | テーブルのトリガーを含めます |
includeComments | bool | false | テーブルとその列に対する COMMENT ON ステートメントを含めます |
get_table_comments
テーブルと各列のコメントを返します。最初に table の行が1つあり、その後に列ごとの行が続き、それぞれデータベース独自のコメント(COMMENT ON で設定された remarks)が含まれます。
| Parameter | Type | Default | Description |
|---|---|---|---|
tableName | string | - | テーブル名 |
owner | string | - | 同じテーブル名を複数の所有者が共有している場合に区別するための所有者名 |
list_dependent_views
テーブルまたはビューに直接依存する、あるいは他のビューを介して依存するビューを一覧表示します(sa_dependent_views)。
| Parameter | Type | Default | Description |
|---|---|---|---|
tableName | string | - | テーブル名またはビュー名 |
owner | string | - | 同じテーブル名を複数の所有者が共有している場合に区別するための所有者名 |
describe_procedure
ストアドプロシージャまたは関数について説明します。パラメーター(in、out、inout)とその型およびデフォルト値、返される結果セットの列、関数の戻り値を示します。
| Parameter | Type | Default | Description |
|---|---|---|---|
procName | string | - | プロシージャ名または関数名 |
owner | string | - | 同じプロシージャ名を複数の所有者が共有している場合に区別するための所有者名 |
get_table_stats
テーブルの正確な行数を返します。テーブル名と所有者名には、英字、数字、アンダースコアのみを使用できます。
| Parameter | Type | Default | Description |
|---|---|---|---|
tableName | string | - | テーブル名 |
owner | string | - | スキーマ修飾アクセス用の所有者名 |
オブジェクト一覧
list_procedures
データベース内のすべてのストアドプロシージャと関数を一覧表示し、それぞれに procedure または function のタグを付けます。
| Parameter | Type | Default | Description |
|---|---|---|---|
objectType | string | - | procedure または function に絞り込みます |
list_views
データベース内のすべてのビューを一覧表示します。
list_triggers
データベース内のすべてのトリガーと、関連付けられたテーブルを一覧表示します。
get_database_info
データベースレベルのプロパティ(名前、製品バージョン、文字セット、照合順序、ページサイズ)を返します。
list_events
すべてのデータベースイベント(スケジュールされたジョブ)と、その名前および有効状態を一覧表示します。
list_sequences
すべてのシーケンスについて、所有者、開始値、増分、範囲、循環設定を一覧表示します。
list_user_types
すべてのユーザー定義データ型(ドメイン)について、所有者、基底型、NULL 許容、デフォルト値、チェック条件を一覧表示します。
list_web_services
データベースで定義されているウェブサービスについて、タイプ(HTTP、SOAP、DISH、RAW、...)、有効かどうか、認証または HTTPS が必要かどうか、実行ユーザーを一覧表示します。
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
nameFilter | string | - | 名前で検索するための SQL LIKE パターン |
ソースの取得
データベースの preserve_source_format オプションが On の場合、SQL Anywhere はプロシージャ、ビュー、トリガー、イベントの元のソースをコメントや書式設定とともに保持します。ソースツールは元のソースを返し、存在しない場合はサーバーによって再書式設定された定義を返します。
get_procedure_source
ストアドプロシージャまたは関数のソース定義全体を返します。
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
procName | string | - | ストアドプロシージャ名 |
owner | string | - | 同じプロシージャ名を複数の所有者が共有している場合に区別するための所有者名 |
get_view_source
ビューのソース定義全体を返します。
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
viewName | string | - | ビュー名 |
owner | string | - | 同じビュー名を複数の所有者が共有している場合に区別するための所有者名 |
get_trigger_source
トリガーのソース定義全体を返します。
| パラメーター | 型 | 説明 |
|---|---|---|
triggerName | string | トリガー名 |
get_event_source
データベースイベントのソース定義全体を返します。
| パラメーター | 型 | 説明 |
|---|---|---|
eventName | string | イベント名 |
get_web_service_source
ウェブサービスの定義を返します。実行する SQL 文、URL の処理方法、DISH サービスの DISH プレフィックス、備考が含まれます。
| パラメーター | 型 | 説明 |
|---|---|---|
serviceName | string | ウェブサービス名 |
search_source
プロシージャと関数、ビュー、トリガー、イベント、およびウェブサービスの文のソースから、指定したテキストを大文字と小文字を区別せずに検索し、そのテキストを含むオブジェクトを一覧表示します。テキストは文字どおりに照合されます。% と _ はワイルドカードではありません。
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
text | string | - | 検索するテキスト |
objectType | string | - | 1 種類のみを検索します:procedure、view、trigger、event、または web service |
maxRows | int | 200 | 返すオブジェクトの最大数 |
プロシージャの呼び出し
call_procedure
config.json でデータベースに対して許可されているストアドプロシージャを呼び出します。トップレベルの allowedProcedures はすべてのデータベースに適用され、各データベース独自の allowedProcedures はそれらに追加されます。それ以外のプロシージャはすべて拒否され、エラーに許可されているプロシージャが一覧表示されます。デフォルトでは許可されているプロシージャがないため、すべての呼び出しが拒否されます。
"allowedProcedures": ["dbo.sa_db_info"],
"databases": {
"demo": { "host": "localhost", "database": "demodb", "allowedProcedures": ["dbo.sa_conn_info"] }
}
ここでは、demo では両方のプロシージャが許可され、それ以外のデータベースでは dbo.sa_db_info のみが許可されます。
Claude に実行させても問題ないプロシージャだけを一覧にしてください。これらのプロシージャは、execute_query の読み取り専用チェックの対象外で、接続の権限を使って実行されます。
| パラメーター | 型 | 説明 |
|---|---|---|
procName | string | プロシージャ名。許可されたプロシージャ間で名前が重複する場合は owner.procedure |
args | object | プロシージャの名前付きパラメーターとその値。省略したパラメーターにはプロシージャのデフォルト値が使われます |
仕組み
サーバーはデータベースごとに永続的な ODBC 接続を 1 つ保持します。この接続は、初めてそのデータベースを使用するツールが呼び出されたときに確立され、各操作の前に疎通確認を行い、接続が切断された場合は自動的に再接続します。config.json が変更されると接続は閉じられ、次回の呼び出し時に新しい設定で再接続されます。
execute_query はアプリケーションレベルで読み取り専用アクセスを強制します。コメントを取り除き、SELECT または WITH 以外のステートメントを拒否し、複数ステートメントのクエリと SELECT ... INTO をブロックします。これは安全対策であり、セキュリティ境界ではありません。実際に保護するには、読み取り権限のみを持つデータベースユーザーで接続してください。その他のすべてのツールは、SQL Anywhere のシステムカタログに対して、ハードコードされたパラメーター化クエリを使用します。
| システムテーブル | 内容 |
|---|---|
sys.systab | テーブルとビュー |
sys.systabcol | テーブルの列 |
sys.sysuser | ユーザーと所有者 |
sys.syscolumns | 型、幅、NULL 可否、コメントを含む列 |
sys.sysidx | インデックス定義 |
sys.sysidxcol | インデックスと列の対応付け |
sys.sysprocedure | ソースコードを含むストアドプロシージャと関数 |
sys.sysprocparm | プロシージャのパラメーターと結果列 |
sys.systrigger | ソースコードを含むトリガー |
sys.systriggers | 対応するテーブルを含むトリガー |
sys.sysview | ビュー定義 |
sys.sysviews | ビュー |
sys.syssource | ビューの元のソース |
sys.sysforeignkeys | 外部キーの関連付け |
sys.sysevent | ソースコードを含むデータベースイベント(スケジュールされたジョブ) |
sys.sysconstraint | 制約のメタデータ(CHECK、PK、FK、UNIQUE) |
sys.syscheck | CHECK 制約の定義 |
sys.sysremark | テーブルと列のコメント |
sys.syssequence | シーケンス |
sys.sysusertype | ユーザー定義データ型 |
sys.syswebservice | Web サービス |
また、sa_get_table_definition、sa_dependent_views、sa_describe_query の各システムプロシージャも呼び出します。これらはすべて、非推奨の互換性ビューではありません。
MCP サーバーは stdio モードで実行され、Claude Code によって自動的に管理されます。
ライセンス
このソフトウェアは、MIT ライセンスのもとでライセンスされています。
SAP および SQL Anywhere は、SAP SE の商標または登録商標です。このプロジェクトは SAP SE と提携しておらず、SAP SE による推奨も受けていません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。