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. 01通过 MCP 客户端探索数据库对象
  2. 02检查存储过程和视图
  3. 03对 SQL 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)服务。MCP 客户端(例如 Claude Code 或 Claude Desktop)可以直接查询 SQL Anywhere 数据库,以探索架构、存储过程、触发器和视图。它可在 Windows、Linux 和 macOS 上运行。

免责声明: sqlanywhere-mcp 是一个独立的社区开源项目。它与 SAP SE 无关,也未获其认可或赞助。SAP 和 SQL Anywhere 是 SAP SE 的商标或注册商标。sqlanywhere-mcp 不包含或再分发任何 SAP 软件。

目录

先决条件

  • SQL Anywhere 17 ODBC 驱动程序,安装在运行 sqlanywhere-mcp 的计算机上。它随适用于你所用平台的 SQL Anywhere 17 客户端或服务器安装包提供。
  • 在 Linux 和 macOS 上,需要 ODBC 驱动管理器:unixODBC(例如 apt install unixodbc、dnf install unixODBC、brew install unixodbc)。Windows 已内置驱动管理器。
  • 用于从源代码构建的 .NET 10 SDK。
  • MCP 客户端,例如 Claude Code 或 Claude Desktop。

sqlanywhere-mcp 本身是一个 .NET 应用程序,不包含平台特定代码。各平台的差异在于驱动程序的注册方式,详见 ODBC 驱动程序设置。

ODBC 驱动程序设置

sqlanywhere-mcp 使用名为 SQL Anywhere 17 的 ODBC 驱动程序连接;这是 Windows 安装程序注册的名称。如果驱动程序注册时使用了其他名称,请使用 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 客户端前加载该脚本。平台相关详情请参阅 SAP 的文档。

连接失败时,工具错误会指出所用的驱动程序,因此客户端可以发现驱动程序名称错误或驱动程序缺失。

安装

获取 sqlanywhere-mcp 有三种方式。它们提供的服务相同,且都需要上述先决条件(ODBC 驱动程序,以及 Linux 和 macOS 上的 unixODBC)。

从 NuGet 获取

SqlAnywhereMcp 包是一个 .NET 工具,每个平台(win-x64、linux-x64、linux-arm64、osx-x64、osx-arm64)都有独立部署版本,因此运行时无需安装 .NET。安装时需要 .NET 10 SDK,它提供 dnx 和 dotnet tool。

无需安装即可运行;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> 是 .NET 运行时标识符,例如 win-x64、linux-x64 或 osx-x64。

配置

文件位置
平台路径
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 时工具使用的数据库名称。只有一个数据库时无需设置
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 客户端会在日志中显示这些信息。
  • 运行时不使用 shell,也不接收输入(stdin 已关闭)。包含空格的参数需加引号。

任何遵循此约定的助手都可使用,例如 pass show sqlanywhere/dev、secret-tool lookup service sqlanywhere,或你自己的小脚本。

推荐助手:keyturn

keyturn 会在操作系统凭据存储(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 相同的操作系统上运行,因此请在该系统上安装 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 可直接正常工作。有两种方式:
    • 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 环境中:在 WSL2 中将其作为 Linux 程序安装并运行,与上述 Linux 操作完全相同。这需要在 WSL2 中安装 Linux 版 SQL Anywhere 17 驱动程序和 unixODBC。

两个构建版本互不共享任何内容:Windows 构建版本读取 Windows 配置和凭据助手,Linux 构建版本则读取 WSL2 中的配置。

重启 Claude Code 使配置生效。Claude Code 启动时会自动启动 MCP 服务。

Claude Desktop 集成

Claude Desktop 从 claude_desktop_config.json 读取 MCP 服务列表。通过“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”中查看日志。

多个数据库

在一个 config.json 的 databases 下列出每个数据库,并以名称为键(参见配置)。每个工具都接受一个可选的 database 参数,用于指定要使用的数据库名称;如果未指定,工具会使用 defaultDatabase,或者在只有一个数据库时使用该数据库。list_databases 会列出现有数据库的名称。

仍然可以多次注册 sqlanywhere-mcp,并通过 SQLANYWHERE_MCP_CONFIG 环境变量为每次注册指定各自的配置文件。这仅在需要将数据库完全隔离时才有用,例如为生产环境单独配置一个服务条目:

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):包括每列的名称、数据类型、是否可为空,以及其来源表列。适用与 execute_query 相同的只读检查。

参数类型描述
sqlstring要描述的 SELECT 或 WITH 查询
所有者
list_owners

列出数据库中至少拥有一个表或视图的所有不同所有者(用户)。

架构查询
list_tables

列出所有基本表和视图及其类型和所有者。

参数类型默认值描述
ownerstring-将结果筛选为特定所有者
nameFilterstring-按名称搜索的 SQL LIKE 模式(例如 cust%、%order%)
describe_table

返回表的列定义:名称、类型、长度、是否可为空、默认值、主键标志和注释。

参数类型默认值描述
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):表及其列、键、外键、使用的序列和已授予的权限。

默认不包含触发器和注释:包含少数几个大型触发器的表所产生的输出可能超出 MCP 客户端单次调用可接受的范围,因为每个触发器会出现两次(其定义和保留的原始源代码)。get_trigger_source 和 get_table_comments 会分别返回这些内容。

ParameterTypeDefaultDescription
tableNamestring-表名
ownerstring-所有者名称;当多个所有者共用同一表名时,用于区分
includeTriggersboolfalse包含表的触发器
includeCommentsboolfalse包含表及其列的 COMMENT ON 语句
get_table_comments

返回表及其每一列的注释:一行对应 table,之后每列各占一行,每行包含数据库自身的注释(remarks,通过 COMMENT ON 设置)。

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

列出所有用户定义的数据类型(域),包括其所有者、基础类型、是否可为空、默认值和检查条件。

list_web_services

列出数据库中定义的 Web 服务,包括其类型(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

返回 Web 服务的定义:它运行的 SQL 语句、URL 处理方式、DISH 服务的 DISH 前缀以及备注。

参数类型描述
serviceNamestringWeb 服务名称
search_source

不区分大小写地搜索过程、函数、视图、触发器、事件和 Web 服务语句的源码,并列出包含指定文本的对象。按文本字面匹配:% 和 _ 不会被视为通配符。

参数类型默认值描述
textstring-要搜索的文本
objectTypestring-仅搜索一种对象: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 连接,在首次调用使用该连接的工具时建立连接;每次操作前都会执行 ping,并在连接断开时自动重新连接。更改 config.json 会关闭连接,连接将在下次调用时使用新设置重新打开。

execute_query 在应用层强制执行只读访问:它会删除注释,拒绝任何非 SELECT 或 WITH 语句,并阻止多语句查询和 SELECT ... INTO。这是一项防护措施,而非安全边界:要实现真正的保护,请使用仅具有读取权限的数据库用户进行连接。所有其他工具均使用针对 SQL Anywhere 系统目录的硬编码参数化查询。

系统表内容
sys.systab表和视图
sys.systabcol表列
sys.sysuser用户和所有者
sys.syscolumns列及其类型、宽度、是否允许为空和注释
sys.sysidx索引定义
sys.sysidxcol索引与列的映射
sys.sysprocedure存储过程和函数及其源代码
sys.sysprocparm过程参数和结果列
sys.systrigger触发器及其源代码
sys.systriggers触发器及其所属表
sys.sysview视图定义
sys.sysviews视图
sys.syssource视图的原始源代码
sys.sysforeignkeys外键关系
sys.sysevent数据库事件(计划作业)及其源代码
sys.sysconstraint约束元数据(检查、主键、外键、唯一)
sys.syscheck检查约束定义
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 无关,也未获得其认可。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。