Skip to main content
Glama
OpenLinkSoftware

mcp-sqlalchemy


SQLAlchemy 経由の MCP サーバー ODBC

FastAPIpyodbcSQLAlchemyを用いて構築された、ODBC 用の軽量 MCP (Model Context Protocol) サーバーです。このサーバーは、Virtuoso DBMS および SQLAlchemy プロバイダーを実装するその他の DBMS バックエンドと互換性があります。

mcpクライアントとサーバー|648x499


特徴

  • スキーマの取得: 接続されたデータベースからすべてのスキーマ名を取得して一覧表示します。

  • テーブルの取得: 特定のスキーマまたはすべてのスキーマのテーブル情報を取得します。

  • テーブルの説明: 次の内容を含むテーブル構造の詳細な説明を生成します:

    • 列名とデータ型

    • ヌル値可能な属性

    • 主キーと外部キー

  • テーブルの検索: 名前の部分文字列に基づいてテーブルをフィルタリングおよび取得します。

  • ストアド プロシージャの実行: Virtuoso の場合は、ストアド プロシージャを実行して結果を取得します。

  • クエリの実行:

    • JSONL 結果形式: 構造化された応答に最適化されています。

    • Markdown テーブル形式: レポートと視覚化に最適です。


Related MCP server: MCP SQL Server

前提条件

  1. uvをインストールします:

    pip install uv

    または Homebrew を使用します:

    brew install uv
  2. unixODBC ランタイム環境チェック:

  3. odbcinst -jを実行してインストール構成(つまり、主要な INI ファイルの場所)を確認します。

  4. odbcinst -q -sを実行して、利用可能なデータソース名を一覧表示します。

  5. ODBC DSN設定:対象データベースのODBCデータソース名( ~/.odbc.ini )を設定します。Virtuoso DBMSの例:

    [VOS]
    Description = OpenLink Virtuoso
    Driver = /path/to/virtodbcu_r.so
    Database = Demo
    Address = localhost:1111
    WideAsUTF16 = Yes
  6. SQLAlchemy URL バインディング: 次の形式を使用します:

    virtuoso+pyodbc://user:password@VOS

インストール

このリポジトリをクローンします:

git clone https://github.com/OpenLinkSoftware/mcp-sqlalchemy-server.git
cd mcp-sqlalchemy-server

環境変数

.envを更新して、デフォルトを上書きし、好みに合わせてください。

ODBC_DSN=VOS
ODBC_USER=dba
ODBC_PASSWORD=dba
API_KEY=xxx

構成

Claude Desktopユーザーの場合: claude_desktop_config.jsonに以下を追加します。

{
  "mcpServers": {
    "my_database": {
      "command": "uv",
      "args": ["--directory", "/path/to/mcp-sqlalchemy-server", "run", "mcp-sqlalchemy-server"],
      "env": {
        "ODBC_DSN": "dsn_name",
        "ODBC_USER": "username",
        "ODBC_PASSWORD": "password",
        "API_KEY": "sk-xxx"
      }
    }
  }
}

使用法

データベース管理システム (DBMS) 接続 URL

以下は、この mcp-server を使用してテストされた DBMS システムに接続するための pyodbc URL の例です。

データベース

URL形式

Virtuoso DBMS

virtuoso+pyodbc://user:password@ODBC_DSN

PostgreSQL

postgresql://user:password@localhost/dbname

MySQL

mysql+pymysql://user:password@localhost/dbname

SQLite

sqlite:///path/to/database.db

接続すると、Claude を介して WhatsApp の連絡先とやり取りできるようになり、WhatsApp の会話で Claude の AI 機能を活用できるようになります。

提供されるツール

概要

名前

説明

podbc_get_schemas

接続されたデータベース管理システム (DBMS) にアクセス可能なデータベース スキーマを一覧表示します。

podbc_get_tables

選択したデータベース スキーマに関連付けられているテーブルを一覧表示します。

podbc_describe_table

指定されたデータベーススキーマに関連付けられたテーブルの説明を提供します。これには、列名、データ型、NULL値の扱い、自動インクリメント、主キー、外部キーに関する情報が含まれます。

podbc_filter_table_names

選択したデータベース スキーマに関連付けられた、 q入力フィールドのサブ文字列パターンに基づいてテーブルを一覧表示します。

podbc_query_database

SQL クエリを実行し、結果を JSONL 形式で返します。

podbc_execute_query

SQL クエリを実行し、結果を JSONL 形式で返します。

podbc_execute_query_md

SQL クエリを実行し、結果を Markdown テーブル形式で返します。

podbc_spasql_クエリ

SPASQL クエリを実行し、結果を返します。

podbc_sparql_クエリ

SPARQL クエリを実行し、結果を返します。

podbc_virtuoso_support_ai

Virtuoso サポート アシスタント/エージェントと対話する - LLM と対話するための Virtuoso 固有の機能

詳細な説明

  • podbc_get_schemas

    • 接続されたデータベースからすべてのスキーマ名のリストを取得して返します。

    • 入力パラメータ:

      • user (文字列、オプション): データベースのユーザー名。デフォルトは「demo」です。

      • password (文字列、オプション): データベースのパスワード。デフォルトは「demo」です。

      • dsn (文字列、オプション): ODBC データソース名。デフォルトは「Local Virtuoso」です。

    • スキーマ名の JSON 文字列配列を返します。

  • podbc_get_tables

    • 指定されたスキーマ内のテーブルに関する情報を含むリストを取得して返します。スキーマが指定されていない場合は、接続のデフォルトスキーマが使用されます。

    • 入力パラメータ:

      • schema (文字列, オプション): テーブルをフィルタリングするためのデータベーススキーマ。デフォルトは接続のデフォルトです。

      • user (文字列、オプション): データベースのユーザー名。デフォルトは「demo」です。

      • password (文字列、オプション): データベースのパスワード。デフォルトは「demo」です。

      • dsn (文字列、オプション): ODBC データソース名。デフォルトは「Local Virtuoso」です。

    • テーブル情報 (例: TABLE_CAT、TABLE_SCHEM、TABLE_NAME、TABLE_TYPE) を含む JSON 文字列を返します。

  • podbc_filter_table_names

    • 名前に特定の部分文字列が含まれるテーブルに関する情報をフィルタリングして返します。

    • 入力パラメータ:

      • q (文字列、必須): テーブル名内で検索する部分文字列。

      • schema (文字列, オプション): テーブルをフィルタリングするためのデータベーススキーマ。デフォルトは接続のデフォルトです。

      • user (文字列、オプション): データベースのユーザー名。デフォルトは「demo」です。

      • password (文字列、オプション): データベースのパスワード。デフォルトは「demo」です。

      • dsn (文字列、オプション): ODBC データソース名。デフォルトは「Local Virtuoso」です。

    • 一致するテーブルの情報を含む JSON 文字列を返します。

  • podbc_describe_table

    • 特定のテーブルの列に関する詳細情報を取得して返します。

    • 入力パラメータ:

      • schema (文字列、必須): テーブルを含むデータベース スキーマ名。

      • table (文字列、必須): 説明するテーブルの名前。

      • user (文字列、オプション): データベースのユーザー名。デフォルトは「demo」です。

      • password (文字列、オプション): データベースのパスワード。デフォルトは「demo」です。

      • dsn (文字列、オプション): ODBC データソース名。デフォルトは「Local Virtuoso」です。

    • テーブルの列を記述する JSON 文字列を返します (例: COLUMN_NAME、TYPE_NAME、COLUMN_SIZE、IS_NULLABLE)。

  • podbc_query_database

    • 標準 SQL クエリを実行し、結果を JSON 形式で返します。

    • 入力パラメータ:

      • query (文字列、必須): 実行する SQL クエリ文字列。

      • user (文字列、オプション): データベースのユーザー名。デフォルトは「demo」です。

      • password (文字列、オプション): データベースのパスワード。デフォルトは「demo」です。

      • dsn (文字列、オプション): ODBC データソース名。デフォルトは「Local Virtuoso」です。

    • クエリ結果を JSON 文字列として返します。

  • podbc_query_database_md

    • 標準 SQL クエリを実行し、Markdown テーブルとしてフォーマットされた結果を返します。

    • 入力パラメータ:

      • query (文字列、必須): 実行する SQL クエリ文字列。

      • user (文字列、オプション): データベースのユーザー名。デフォルトは「demo」です。

      • password (文字列、オプション): データベースのパスワード。デフォルトは「demo」です。

      • dsn (文字列、オプション): ODBC データソース名。デフォルトは「Local Virtuoso」です。

    • クエリ結果を Markdown テーブル文字列として返します。

  • podbc_query_database_jsonl

    • 標準 SQL クエリを実行し、結果を JSON Lines (JSONL) 形式 (1 行につき 1 つの JSON オブジェクト) で返します。

    • 入力パラメータ:

      • query (文字列、必須): 実行する SQL クエリ文字列。

      • user (文字列、オプション): データベースのユーザー名。デフォルトは「demo」です。

      • password (文字列、オプション): データベースのパスワード。デフォルトは「demo」です。

      • dsn (文字列、オプション): ODBC データソース名。デフォルトは「Local Virtuoso」です。

    • クエリ結果を JSONL 文字列として返します。

  • podbc_spasql_クエリ

    • SPASQL(SQL/SPARQLハイブリッド)クエリを実行し、結果を返します。これはVirtuoso固有の機能です。

    • 入力パラメータ:

      • query (文字列、必須): SPASQL クエリ文字列。

      • max_rows (数値、オプション): 返される行の最大数。デフォルトは 20 です。

      • timeout (数値、オプション):クエリのタイムアウト(ミリ秒)。デフォルトは30000です。

      • user (文字列、オプション): データベースのユーザー名。デフォルトは「demo」です。

      • password (文字列、オプション): データベースのパスワード。デフォルトは「demo」です。

      • dsn (文字列、オプション): ODBC データソース名。デフォルトは「Local Virtuoso」です。

    • 基になるストアド プロシージャ呼び出し (例: Demo.demo.execute_spasql_query ) からの結果を返します。

  • podbc_sparql_クエリ

    • SPARQLクエリを実行し、結果を返します。これはVirtuoso固有の機能です。

    • 入力パラメータ:

      • query (文字列、必須): SPARQL クエリ文字列。

      • format (文字列、オプション): 希望する結果形式。デフォルトは 'json' です。

      • timeout (数値、オプション):クエリのタイムアウト(ミリ秒)。デフォルトは30000です。

      • user (文字列、オプション): データベースのユーザー名。デフォルトは「demo」です。

      • password (文字列、オプション): データベースのパスワード。デフォルトは「demo」です。

      • dsn (文字列、オプション): ODBC データソース名。デフォルトは「Local Virtuoso」です。

    • 基礎となる関数呼び出しの結果を返します (例: "UB".dba."sparqlQuery" )。

  • podbc_virtuoso_support_ai

    • Virtuoso固有のAIアシスタント機能を利用し、プロンプトとオプションのAPIキーを渡します。これはVirtuoso固有の機能です。

    • 入力パラメータ:

      • prompt (文字列、必須): AI 関数のプロンプト テキスト。

      • api_key (文字列、オプション):AIサービスのAPIキー。デフォルトは「なし」です。

      • user (文字列、オプション): データベースのユーザー名。デフォルトは「demo」です。

      • password (文字列、オプション): データベースのパスワード。デフォルトは「demo」です。

      • dsn (文字列、オプション): ODBC データソース名。デフォルトは「Local Virtuoso」です。

    • AI サポート アシスタント関数呼び出しの結果を返します (例: DEMO.DBA.OAI_VIRTUOSO_SUPPORT_AI )。


トラブルシューティング

トラブルシューティングを簡単にするには:

  1. MCP Inspector をインストールします。

    npm install -g @modelcontextprotocol/inspector
  2. インスペクターを起動します。

    npx @modelcontextprotocol/inspector uv --directory /path/to/mcp-sqlalchemy-server run mcp-sqlalchemy-server

提供された URL にアクセスして、サーバー相互作用のトラブルシューティングを行います。

Available Tools

11 tools
podbc_describe_tableC

Retrieve and return a dictionary containing the definition of a table, including column names, data types, nullable, autoincrement, primary key, and foreign keys.

ParametersJSON Schema
NameRequiredDescriptionDefault
SchemaYes
tableYes
urlNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It describes the output format ('dictionary containing the definition') but lacks critical behavioral details: whether this is a read-only operation, potential performance impacts, error conditions, or authentication needs. For a database tool with zero annotation coverage, this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the purpose. It avoids unnecessary words and directly states the action and output. However, it could be slightly more structured by separating usage context from output details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 3 parameters, 0% schema coverage, no annotations, and no output schema, the description is incomplete. It adequately explains the purpose but misses parameter explanations, behavioral transparency, and usage guidelines. Given the complexity and lack of structured data, it should provide more context to be fully helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so parameters are undocumented in the schema. The description mentions 'table' implicitly but doesn't explain any of the three parameters (Schema, table, url) or their semantics. It adds no value beyond what the parameter names suggest, failing to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('retrieve and return') and resource ('definition of a table'), specifying what information is included (column names, data types, etc.). It distinguishes from siblings like podbc_get_tables (which likely lists tables) by focusing on table structure details. However, it doesn't explicitly name alternatives or contrast with all siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like podbc_get_tables or podbc_filter_table_names. It doesn't mention prerequisites, context for use, or exclusions. Usage is implied by the purpose but not explicitly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

podbc_execute_queryC

Execute a SQL query and return results in JSONL format.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_rowsNo
paramsNo
queryYes
urlNo

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the output format (JSONL) but doesn't address critical aspects like whether this is a read-only or write operation, authentication requirements, rate limits, error handling, or what happens when max_rows is exceeded. For a SQL execution tool, this leaves significant gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise - a single sentence that efficiently communicates the core functionality. There's no wasted verbiage, and the information is front-loaded with the essential action and output format.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a SQL execution tool with 4 parameters, 0% schema coverage, no annotations, and no output schema, the description is inadequate. It doesn't explain parameter usage, behavioral constraints, or what the tool returns beyond format. The agent would struggle to use this tool correctly without significant trial and error.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage and 4 parameters (query, max_rows, params, url), the description provides no information about any parameters. It doesn't explain what 'params' should contain, what 'url' refers to, or how 'max_rows' affects execution. The description fails to compensate for the complete lack of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Execute a SQL query') and outcome ('return results in JSONL format'), which is specific and unambiguous. However, it doesn't differentiate itself from sibling tools like 'podbc_query_database' or 'podbc_execute_query_md', which likely have overlapping functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With multiple sibling tools involving queries (podbc_query_database, podbc_execute_query_md, podbc_sparql_query, etc.), there's no indication of what makes this tool distinct or when it should be preferred over others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

podbc_execute_query_mdB

Execute a SQL query and return results in Markdown table format.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_rowsNo
paramsNo
queryYes
urlNo

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions execution and output format, but lacks critical behavioral details: it doesn't specify if this is read-only or mutating, potential risks (e.g., data modification), authentication needs, rate limits, or error handling. For a tool with 4 parameters and no annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core functionality ('Execute a SQL query') and adds value with the output detail ('in Markdown table format'). There is no wasted wording, making it appropriately sized for its purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters with 0% schema coverage, no annotations, no output schema, and sibling tools with similar names, the description is incomplete. It doesn't explain parameters, behavioral traits, or differentiate from alternatives, making it inadequate for a tool of this complexity. The output format is mentioned, but other critical context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning none of the 4 parameters have descriptions in the schema. The tool description adds no information about parameters like 'query', 'max_rows', 'params', or 'url', failing to compensate for the coverage gap. This leaves parameters largely unexplained beyond their titles and types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Execute a SQL query') and the output format ('return results in Markdown table format'), which distinguishes it from siblings like 'podbc_execute_query' that likely return different formats. However, it doesn't explicitly mention what resource it acts on (e.g., a database), making it slightly less specific than a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for SQL queries needing Markdown output, but provides no explicit guidance on when to use this vs. alternatives like 'podbc_execute_query' or other query tools. There's no mention of prerequisites, limitations, or specific scenarios favoring this tool, leaving usage context inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

podbc_filter_table_namesC

Retrieve and return a list containing information about tables whose names contain the substring 'q' in the format [{'schema': 'schema_name', 'table': 'table_name'}, {'schema': 'schema_name', 'table': 'table_name'}].

ParametersJSON Schema
NameRequiredDescriptionDefault
qYes
urlNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves and returns a list, implying a read-only operation, but doesn't mention any behavioral traits like performance characteristics, error handling, authentication requirements, or rate limits. The description is minimal and doesn't provide context beyond the basic operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that efficiently conveys the core functionality and output format. It's front-loaded with the main purpose and includes specific details about the return format. There's no wasted verbiage, though it could be slightly more concise by omitting the explicit output example if not critical.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (2 parameters, no annotations, no output schema), the description is minimally adequate. It covers the purpose and output format but lacks details on parameters, behavioral context, and usage guidelines. The absence of an output schema means the description should ideally explain return values more thoroughly, though it does specify the format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description mentions the 'q' parameter implicitly ('tables whose names contain the substring 'q''), adding semantic meaning that the schema lacks (0% coverage). However, it doesn't explain the 'url' parameter at all, leaving half of the parameters undocumented. The baseline is 3 because the description compensates partially but not fully for the low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Retrieve and return a list containing information about tables whose names contain the substring 'q''. It specifies the verb ('retrieve and return'), resource ('tables'), and filtering criteria ('names contain the substring'). However, it doesn't explicitly differentiate from sibling tools like podbc_get_tables or podbc_get_schemas, which likely have overlapping functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like podbc_get_tables (which might list all tables without filtering) or podbc_get_schemas (which might list schemas). There's no context about prerequisites, constraints, or typical use cases for substring filtering versus other filtering methods.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

podbc_get_schemasC

Retrieve and return a list of all schema names from the connected database.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action but lacks details on permissions, rate limits, error handling, or what 'connected database' entails. This is a significant gap for a tool that interacts with a database, making it inadequate for safe and effective use.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without any fluff. It's appropriately sized and front-loaded, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of database operations, no annotations, no output schema, and 0% schema description coverage, the description is incomplete. It fails to address critical aspects like return format, error cases, or connection requirements, which are essential for an AI agent to use this tool reliably.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no information about the single parameter 'url', and schema description coverage is 0%, leaving the parameter undocumented. However, with only one parameter and a baseline of 3 for minimal coverage, the score reflects that the description doesn't compensate but doesn't worsen the gap significantly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Retrieve and return') and resource ('list of all schema names from the connected database'), making the purpose specific and understandable. It doesn't explicitly differentiate from sibling tools like 'podbc_get_tables' or 'podbc_filter_table_names', which might retrieve different database objects, so it misses the highest score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites like needing a database connection, nor does it compare to siblings such as 'podbc_get_tables' for table-level retrieval, leaving the agent without context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

podbc_get_tablesC

Retrieve and return a list containing information about tables in specified schema, if empty uses connection default

ParametersJSON Schema
NameRequiredDescriptionDefault
SchemaNo
urlNo

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions the action 'retrieve and return' but doesn't disclose behavioral traits such as read-only vs. destructive nature, authentication requirements, rate limits, error handling, or output format. For a tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste. It's front-loaded with the core purpose and includes essential conditional behavior. Every word earns its place, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (2 parameters, database interaction), lack of annotations, and no output schema, the description is incomplete. It doesn't cover return values, error cases, or behavioral details needed for safe and effective use. The description should do more to compensate for missing structured data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It implies the 'Schema' parameter's purpose ('specified schema') and default behavior ('if empty uses connection default'), but doesn't explain the 'url' parameter at all. With 2 parameters and incomplete coverage, the description adds only marginal value beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'retrieve and return' and the resource 'list containing information about tables in specified schema'. It distinguishes the scope by mentioning 'if empty uses connection default', which helps differentiate it from siblings like podbc_filter_table_names or podbc_get_schemas. However, it doesn't explicitly contrast with all siblings, keeping it at 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention siblings like podbc_get_schemas for schema listing or podbc_filter_table_names for filtered table names, nor does it specify prerequisites or exclusions. This leaves the agent without context for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

podbc_query_databaseC

Execute a SQL query and return results in JSONL format.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
urlNo

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the action ('Execute a SQL query') and output format ('JSONL format'), but fails to cover critical aspects like whether this is a read-only or write operation, potential side effects (e.g., data modification), error handling, or performance considerations (e.g., query timeouts). For a database query tool, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core functionality ('Execute a SQL query') and specifies the output format. There is no wasted language, making it highly concise and well-structured for quick comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a database query tool with no annotations, 2 parameters (one undocumented), and no output schema, the description is incomplete. It omits essential details like the tool's scope (e.g., supported SQL dialects), return value structure beyond 'JSONL format', and error conditions. This leaves the agent with inadequate context for reliable use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, meaning parameters 'query' and 'url' are undocumented in the schema. The description adds minimal value by implying 'query' is a SQL statement, but it doesn't explain the purpose of the 'url' parameter (e.g., database connection string) or provide any syntax examples. This insufficiently compensates for the lack of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Execute') and resource ('SQL query') with the specific outcome ('return results in JSONL format'). It distinguishes itself from siblings like 'podbc_describe_table' or 'podbc_get_tables' by focusing on query execution rather than metadata retrieval, though it doesn't explicitly differentiate from 'podbc_execute_query' which has a similar name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'podbc_execute_query' or 'podbc_execute_query_md'. It lacks context about prerequisites, such as whether a database connection is required or how the 'url' parameter relates to usage. This leaves the agent without clear direction for tool selection among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

podbc_sparql_funcD

Call ???.

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNo
promptYes
urlNo

TDQS

D1.1/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure but provides none. 'Call ???.' gives no indication of whether this is a read/write operation, what permissions might be required, what side effects exist, or how results are returned. This is completely inadequate for a tool with 3 parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

While technically concise with just two words, this represents under-specification rather than effective brevity. The description is too minimal to be useful, and the placeholder '???' suggests it's incomplete rather than intentionally concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 3 parameters, no annotations, no output schema, and 0% schema description coverage, the description is completely inadequate. It provides no information about purpose, behavior, parameters, or usage context, making it impossible for an agent to understand how to use this tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning none of the 3 parameters (api_key, prompt, url) have descriptions in the schema. The tool description provides absolutely no information about parameter meanings, formats, or usage, failing completely to compensate for the schema's deficiencies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose1/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Call ???.' is tautological (restates the name 'podbc_sparql_func' without adding meaningful content) and provides no information about what the tool actually does. It doesn't specify what resource or operation is involved, making it completely unhelpful for understanding the tool's purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus the 9 sibling tools on the server. The description offers no context about appropriate use cases, prerequisites, or alternatives, leaving the agent with no basis for selection among similar database/query tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

podbc_sparql_queryC

Execute a SPARQL query and return results.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNojson
queryYes
timeoutNo
urlNo

TDQS

C2.4/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the basic action and outcome, lacking critical details like error handling, rate limits, authentication needs, or what 'return results' entails (e.g., format, structure). This is inadequate for a tool with no annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with a single sentence that front-loads the core purpose. There's no wasted text, making it efficient and easy to parse, though this brevity contributes to gaps in other dimensions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (4 parameters, 0% schema coverage, no output schema, no annotations), the description is severely incomplete. It doesn't explain parameter semantics, behavioral traits, or output details, making it inadequate for effective tool use by an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning parameters are undocumented in the schema. The description adds no information about parameters like 'query', 'format', 'timeout', or 'url', failing to compensate for the coverage gap. This leaves the agent guessing about parameter meanings and usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Execute a SPARQL query') and outcome ('return results'), which is specific and unambiguous. However, it doesn't differentiate from sibling tools like 'podbc_sparql_func' or 'podbc_spasql_query', which likely have similar purposes, so it misses full sibling distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, such as sibling tools like 'podbc_execute_query' or 'podbc_sparql_func'. There's no mention of context, prerequisites, or exclusions, leaving the agent with minimal usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

podbc_spasql_queryC

Execute a SPASQL query and return results.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_rowsNo
queryYes
timeoutNo
urlNo

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It states the tool executes a query and returns results, but lacks critical behavioral details such as whether it's read-only or destructive, authentication requirements, rate limits, error handling, or what format results are returned in. This is inadequate for a tool with potential data access implications.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words. It's appropriately sized for a basic tool description and front-loads the core functionality without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters with 0% schema coverage, no annotations, no output schema, and multiple sibling tools, the description is incomplete. It doesn't provide enough context about behavior, parameters, or usage differentiation to adequately guide an agent in selecting and invoking this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate but adds no parameter information. It doesn't explain what 'query' should contain, what 'max_rows' limits, what 'timeout' controls, or what 'url' specifies. With 4 parameters (1 required) and no schema descriptions, this leaves significant gaps in understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Execute' and the resource 'SPASQL query', specifying the action and target. It distinguishes from siblings like 'podbc_sparql_query' by specifying SPASQL rather than SPARQL, but doesn't fully differentiate from other query execution tools like 'podbc_execute_query' or 'podbc_query_database' beyond the query language type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. With multiple sibling tools for querying and execution (e.g., podbc_execute_query, podbc_sparql_query, podbc_query_database), the description lacks context about specific use cases, prerequisites, or comparisons to help an agent choose appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

podbc_virtuoso_support_aiD

Tool to use the Virtuoso AI support function

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNo
promptYes
urlNo

TDQS

D1.3/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure but offers almost none. It doesn't indicate whether this is a read or write operation, what kind of AI support is provided, what the typical response format is, or any limitations. The description is too vague to help an agent understand what behavior to expect when invoking this tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

While technically concise (one sentence), this is under-specification rather than effective conciseness. The single sentence 'Tool to use the Virtuoso AI support function' doesn't provide enough information to be useful. Good conciseness balances brevity with completeness - this leans too far toward brevity at the expense of utility.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 3 parameters with 0% schema coverage, no annotations, no output schema, and a complex-sounding 'AI support function', the description is completely inadequate. It doesn't explain what the tool does, how to use it, what inputs it expects, or what outputs to anticipate. For a tool that appears to involve AI interaction with a database system, this level of documentation is insufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage and 3 parameters (api_key, prompt, url), the description provides no information about any parameters. It doesn't explain what the 'prompt' parameter should contain, what the 'api_key' is for, or what 'url' refers to. The description fails to compensate for the complete lack of parameter documentation in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Tool to use the Virtuoso AI support function' is tautological - it essentially restates the tool name 'podbc_virtuoso_support_ai' with minimal elaboration. While it mentions 'AI support function', it doesn't specify what this function actually does (e.g., answer questions, generate code, troubleshoot). It doesn't distinguish itself from sibling tools like podbc_execute_query or podbc_sparql_query.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. Given the sibling tools include various database query and schema exploration tools, there's no indication whether this AI support function is for natural language queries, debugging assistance, or something else. No context about appropriate use cases or prerequisites is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 11 tool updatesv1.0.0
    • First observedpodbc_describe_table
    • First observedpodbc_execute_query
    • First observedpodbc_execute_query_md
    • First observedpodbc_filter_table_names
    • First observedpodbc_get_schemas
    • First observedpodbc_get_tables
    • First observedpodbc_query_database
    • First observedpodbc_sparql_func
    • First observedpodbc_sparql_query
    • First observedpodbc_spasql_query
    • First observedpodbc_virtuoso_support_ai

TDQS

C2.3/5.0
Disambiguation2/5

Multiple tools have overlapping or unclear purposes, causing confusion. For example, podbc_execute_query and podbc_query_database both execute SQL queries and return results in JSONL format, making them nearly indistinguishable. Additionally, podbc_sparql_func and podbc_virtuoso_support_ai have vague descriptions that don't clearly differentiate their functions from other query tools.

Naming Consistency4/5

The naming follows a consistent prefix pattern (podbc_) and uses snake_case throughout, which is predictable. However, there are minor deviations like podbc_spasql_query (likely a typo for SPARQL) and inconsistent verb usage (e.g., get_schemas vs. filter_table_names), but overall the structure is readable and mostly uniform.

Tool Count4/5

With 11 tools, the count is reasonable for a database interaction server, covering schema exploration, table queries, and specialized functions. It's slightly on the higher side but still manageable, as each tool appears to serve a distinct technical purpose, though some redundancy exists.

Completeness3/5

The toolset covers core database operations like querying, schema retrieval, and table description, but there are notable gaps. For instance, there are no tools for data manipulation (e.g., insert, update, delete) or transaction management, which are essential for a complete SQLAlchemy-like interface. The inclusion of SPARQL and specialized functions adds niche coverage but doesn't fill these basic CRUD gaps.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    Provides generic Open Database Connectivity (ODBC) to any Database Management System (DBMS) that's accessible via an ODBC Connector (Driver).
    12
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with Microsoft SQL Server databases using both SQL Server and Windows Authentication. It supports flexible connection configurations, including read-only modes and encrypted communication for secure data management.
    3,338
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables SQL agents to connect to any SQLAlchemy-supported database via MCP, providing read-only SQL querying, automatic table summarization, and column content search.
    4
    Apache 2.0

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/OpenLinkSoftware/mcp-sqlalchemy-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server