mcpField
S
sqlanywhere-mcp

sqlanywhere-mcp

ローカル
github.com/Dwarf1erデータベース06 日前に更新

sqlanywhere-mcp について

sqlanywhere-mcp は、MCP クライアントから SAP SQL Anywhere 17 データベースへ接続するオープンソースの MCP サーバーです。データベースの調査や読み取り専用クエリを目的とし、スキーマ情報やストアドプロシージャへのアクセスを設定できます。

主な機能

  1. 01設定済みデータベースへの接続
  2. 02スキーマ・ビュー・トリガーの調査
  3. 03オブジェクト定義の一覧と取得
  4. 04読み取り専用クエリの実行
  5. 05呼び出し可能なプロシージャの制限

活用シーン

  1. 01MCP クライアントからのデータベースオブジェクト調査
  2. 02ストアドプロシージャやビューの確認
  3. 03SQL Anywhere 17 への読み取り専用 SQL クエリ

MCP 対応

データベース一覧、スキーマ調査、クエリ、プロシージャ呼び出しのツールを MCP クライアントに公開します。ODBC ドライバーを介して SAP SQL Anywhere 17 に接続します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
nugetSqlAnywhereMcp0.1.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

sqlanywhere-mcp

SAP SQL Anywhere 17 向け MCP サーバー
sqlanywhere-mcp ロゴ

CI NuGet Release License

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 DebugDebug モードでビルドします
-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)
driverSQL Anywhere 17ドライバーマネージャーに登録された ODBC ドライバー名、またはドライバーライブラリのパスです。ODBC ドライバーの設定を参照してください
port2638データベースの 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
      
  • 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 秒を超えるクエリはキャンセルされます。

パラメーター型デフォルト説明
sqlstring-実行する SQL クエリ
maxRowsint500返される行の最大数(最大 10000)

結果が maxRows を超えると、レスポンスの truncated フラグは true に設定されます。また、返された行数を示す count フィールドも含まれます。

explain_query

読み取り専用 SQL クエリ(SELECT または WITH のみ)の実行計画を返します。

パラメーター型説明
sqlstring実行計画を取得する SQL クエリ
describe_query

クエリを実行せずに、読み取り専用クエリの結果セットを説明します(sa_describe_query)。各列の名前、データ型、NULL 許容性、および参照元のテーブル列を示します。execute_query と同じ読み取り専用チェックが適用されます。

パラメーター型説明
sqlstring説明する SELECT または WITH クエリ
所有者
list_owners

データベース内で少なくとも 1 つのテーブルまたはビューを所有する、すべての一意な所有者(ユーザー)を一覧表示します。

スキーマの調査
list_tables

すべてのベーステーブルとビューについて、種類と所有者を一覧表示します。

パラメーター型デフォルト説明
ownerstring-特定の所有者に結果を絞り込みます
nameFilterstring-名前を検索するための SQL LIKE パターン(例:cust%、%order%)
describe_table

テーブルの列定義を返します。内容は、名前、型、長さ、NULL 許容性、デフォルト値、主キーのフラグ、コメントです。

パラメーター型デフォルト説明
tableNamestring-テーブル名
ownerstring-同じテーブル名を複数の所有者が使用している場合に区別するための所有者名
list_check_constraints

テーブルのすべてのチェック制約について、名前と定義を一覧表示します。

パラメーター型説明
tableNamestringテーブル名
list_indexes

テーブルのすべてのインデックスを一覧表示します。主キー、外部キー、セカンダリインデックス、テキストインデックスについて、一意性と対象となる列の順序を示します(降順の列には desc が付きます)。

ParameterTypeDefaultDescription
tableNamestring-テーブル名
ownerstring-同じテーブル名を複数の所有者が共有している場合に区別するための所有者名
list_foreign_keys

データベース内のすべての外部キーを一覧表示します。ロール名、子テーブル、親テーブル、対応する列を示します。

ParameterTypeDefaultDescription
tableNamestring-特定の子(参照元)テーブルに絞り込みます
get_table_definition

データベースがテーブルに対して生成する CREATE ステートメント(sa_get_table_definition)を返します。テーブルとその列、キー、外部キー、使用するシーケンス、付与された権限が含まれます。

トリガーとコメントは、デフォルトでは含まれません。大きなトリガーがいくつかあるテーブルでは、各トリガーが定義と保持された元のソースの2回出力されるため、1回の呼び出しで MCP クライアントが受け入れられる量を超える可能性があります。トリガーとコメントは、それぞれ get_trigger_source と get_table_comments で個別に取得できます。

ParameterTypeDefaultDescription
tableNamestring-テーブル名
ownerstring-同じテーブル名を複数の所有者が共有している場合に区別するための所有者名
includeTriggersboolfalseテーブルのトリガーを含めます
includeCommentsboolfalseテーブルとその列に対する COMMENT ON ステートメントを含めます
get_table_comments

テーブルと各列のコメントを返します。最初に table の行が1つあり、その後に列ごとの行が続き、それぞれデータベース独自のコメント(COMMENT ON で設定された remarks)が含まれます。

ParameterTypeDefaultDescription
tableNamestring-テーブル名
ownerstring-同じテーブル名を複数の所有者が共有している場合に区別するための所有者名
list_dependent_views

テーブルまたはビューに直接依存する、あるいは他のビューを介して依存するビューを一覧表示します(sa_dependent_views)。

ParameterTypeDefaultDescription
tableNamestring-テーブル名またはビュー名
ownerstring-同じテーブル名を複数の所有者が共有している場合に区別するための所有者名
describe_procedure

ストアドプロシージャまたは関数について説明します。パラメーター(in、out、inout)とその型およびデフォルト値、返される結果セットの列、関数の戻り値を示します。

ParameterTypeDefaultDescription
procNamestring-プロシージャ名または関数名
ownerstring-同じプロシージャ名を複数の所有者が共有している場合に区別するための所有者名
get_table_stats

テーブルの正確な行数を返します。テーブル名と所有者名には、英字、数字、アンダースコアのみを使用できます。

ParameterTypeDefaultDescription
tableNamestring-テーブル名
ownerstring-スキーマ修飾アクセス用の所有者名
オブジェクト一覧
list_procedures

データベース内のすべてのストアドプロシージャと関数を一覧表示し、それぞれに procedure または function のタグを付けます。

ParameterTypeDefaultDescription
objectTypestring-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 が必要かどうか、実行ユーザーを一覧表示します。

パラメーター型デフォルト説明
nameFilterstring-名前で検索するための SQL LIKE パターン
ソースの取得

データベースの preserve_source_format オプションが On の場合、SQL Anywhere はプロシージャ、ビュー、トリガー、イベントの元のソースをコメントや書式設定とともに保持します。ソースツールは元のソースを返し、存在しない場合はサーバーによって再書式設定された定義を返します。

get_procedure_source

ストアドプロシージャまたは関数のソース定義全体を返します。

パラメーター型デフォルト説明
procNamestring-ストアドプロシージャ名
ownerstring-同じプロシージャ名を複数の所有者が共有している場合に区別するための所有者名
get_view_source

ビューのソース定義全体を返します。

パラメーター型デフォルト説明
viewNamestring-ビュー名
ownerstring-同じビュー名を複数の所有者が共有している場合に区別するための所有者名
get_trigger_source

トリガーのソース定義全体を返します。

パラメーター型説明
triggerNamestringトリガー名
get_event_source

データベースイベントのソース定義全体を返します。

パラメーター型説明
eventNamestringイベント名
get_web_service_source

ウェブサービスの定義を返します。実行する SQL 文、URL の処理方法、DISH サービスの DISH プレフィックス、備考が含まれます。

パラメーター型説明
serviceNamestringウェブサービス名
search_source

プロシージャと関数、ビュー、トリガー、イベント、およびウェブサービスの文のソースから、指定したテキストを大文字と小文字を区別せずに検索し、そのテキストを含むオブジェクトを一覧表示します。テキストは文字どおりに照合されます。% と _ はワイルドカードではありません。

パラメーター型デフォルト説明
textstring-検索するテキスト
objectTypestring-1 種類のみを検索します:procedure、view、trigger、event、または web service
maxRowsint200返すオブジェクトの最大数
プロシージャの呼び出し
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 の読み取り専用チェックの対象外で、接続の権限を使って実行されます。

パラメーター型説明
procNamestringプロシージャ名。許可されたプロシージャ間で名前が重複する場合は owner.procedure
argsobjectプロシージャの名前付きパラメーターとその値。省略したパラメーターにはプロシージャのデフォルト値が使われます

仕組み

サーバーはデータベースごとに永続的な 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.syscheckCHECK 制約の定義
sys.sysremarkテーブルと列のコメント
sys.syssequenceシーケンス
sys.sysusertypeユーザー定義データ型
sys.syswebserviceWeb サービス

また、sa_get_table_definition、sa_dependent_views、sa_describe_query の各システムプロシージャも呼び出します。これらはすべて、非推奨の互換性ビューではありません。

MCP サーバーは stdio モードで実行され、Claude Code によって自動的に管理されます。

ライセンス

このソフトウェアは、MIT ライセンスのもとでライセンスされています。

SAP および SQL Anywhere は、SAP SE の商標または登録商標です。このプロジェクトは SAP SE と提携しておらず、SAP SE による推奨も受けていません。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。