mcp-dm8-server

mcp-dm8-server

Provides table structure browsing and read-only query capabilities for DM8 databases, enabling interaction through MCP clients like Claude Desktop.

Category
Visit Server

README

mcp-dm8-server

lianekai 维护的 TypeScript 版达梦 DM8 Model Context Protocol (MCP) 服务,提供表结构浏览和只读查询能力,便于在支持 MCP 的客户端(如 Claude Desktop、mcp-router、mcp-use)中直接操作达梦数据库。

目录

  1. 主要特性
  2. 环境要求
  3. 安装与构建
  4. 配置方式
  5. 在 MCP 客户端中注册
  6. 可用工具说明
  7. 开发与测试指南
  8. 常见问题

主要特性

  • list_tablesdescribe_tableexecute_query 覆盖 Schema 列表、表结构和只读 SQL 操作。
  • 参数统一校验,自动规避 schema/table 注入风险,并强制限制为 SELECT/SHOW/DESCRIBE/EXPLAIN。
  • 支持环境变量、CLI 以及 .env 文件组合配置,易于部署。
  • 默认使用 stdio 传输,可与任意 MCP 客户端对接。

环境要求

  • Node.js >= 16(推荐 16.x;若使用 18.x 需追加 --openssl-legacy-provider,原因是 Node 18 内置的 OpenSSL 3 默认禁用旧算法,而达梦官方 dmdb 驱动仍依赖 legacy provider)。
  • npm >= 9 或兼容包管理器。
  • 达梦 DM8 数据库实例及具备权限的账号。
  • 达梦 Node 原生驱动依赖(dmdb 已在 package.json 中声明,必要时按官方文档安装系统库)。

安装与构建

git clone https://github.com/lianekai/mcp-dm8-server.git
cd mcp-dm8-server
npm install
npm run build

构建完成后即可运行:

DM_HOST=127.0.0.1 DM_PORT=5236 DM_USERNAME=SYSDBA DM_PASSWORD=密码 DM_SCHEMA=SYSDBA \
  node dist/index.js

也可以直接使用 npx 调用已经构建好的 CLI(等价于 node dist/index.js,更方便在 Codex 或其他 MCP 调度器中引用):

npx mcp-dm8 --host 127.0.0.1 --port 5236 --username SYSDBA --password 密码 --schema SYSDBA

注意:首次执行前需要先运行 npm run build 生成 dist/cli.js

配置方式

支持命令行参数、setConfig 运行时注入、环境变量/.env。优先级:CLI > 运行时 > 环境变量。

配置项 CLI 参数 环境变量 默认值
用户名 --username DM_USERNAME
密码 --password DM_PASSWORD
主机 --host DM_HOST
端口 --port DM_PORT 5236
默认 Schema --schema DM_SCHEMA

示例 .env

DM_HOST=localhost
DM_PORT=5236
DM_USERNAME=SYSDBA
DM_PASSWORD=••••••
DM_SCHEMA=SYSDBA

查看版本:

node dist/index.js --version

快速启动

node 版本选择上,请注意:使用 Node.js 16.x 时可以直接启动;若使用 Node.js 18.x,则必须通过命令行参数显式追加 --openssl-legacy-provider 以启用被默认禁用的旧 OpenSSL 算法,否则启动会失败。

  • npm 脚本:仓库内已提供 npm run start:dm8,会自动为当前进程注入 NODE_OPTIONS=--openssl-legacy-provider。Windows 环境若需兼容,可改用 cross-env NODE_OPTIONS=--openssl-legacy-provider node dist/index.js
  • Shell 启动器:执行 ./start-dm8.sh --host 127.0.0.1 --port 5236 --username SYSDBA --password 密码 --schema SYSDBA,脚本会自动附加 legacy provider 并将参数透传给 dist/index.js
  • Direnv 环境变量:仓库根目录提供 .envrc,如果你使用 direnv,在项目目录执行一次 direnv allow,进入目录时会自动设置 NODE_OPTIONS=--openssl-legacy-provider。若不需要该行为,可删除或忽略 .envrc

在 MCP 客户端中注册

Claude Desktop

claude_desktop_config.json 追加:

{
  "mcpServers": {
    "dm8": {
      "command": "node",
      "args": ["/path/to/mcp-dm8-server/dist/index.js"],
      "env": {
        "DM_HOST": "127.0.0.1",
        "DM_PORT": "5236",
        "DM_USERNAME": "SYSDBA",
        "DM_PASSWORD": "your-password",
        "DM_SCHEMA": "SYSDBA"
      }
    }
  }
}

mcp-router / mcp-use

config.json 追加:

{
  "servers": {
    "dm8": {
      "command": "node",
      "args": ["/path/to/mcp-dm8-server/dist/index.js"],
      "env": {
        "DM_HOST": "127.0.0.1",
        "DM_PORT": "5236",
        "DM_USERNAME": "SYSDBA",
        "DM_PASSWORD": "your-password",
        "DM_SCHEMA": "SYSDBA"
      }
    }
  }
}

如果想直接使用源码运行,可把 args 替换为 npx tsx src/index.ts,并确保本地已安装 tsx

Codex CLI

  1. 构建产物(若尚未执行过):npm run build
  2. 编辑 ~/.codex/config.toml,确保将项目路径标记为可信,例如:
    [projects."/Users/your-user/software/mcp/mcp-dm8-server"]
    trust_level = "trusted"
    
  3. 在同一文件的 [mcp_servers] 段落追加达梦服务定义:
    [mcp_servers.dm8]
    command = "node"
    args = [
      "/Users/your-user/software/mcp/mcp-dm8-server/dist/index.js",
      "--host", "127.0.0.1",
      "--port", "5236",
      "--username", "SYSDBA",
      "--password", "your-password",
      "--schema", "SYSDBA"
    ]
    

    如果希望在运行时切换配置,可把上述敏感参数改为环境变量并结合 .env,或使用 --username 等 CLI 参数覆盖。

  4. 保存后重新启动 Codex CLI 会话(或执行 codex reset)以加载新的 MCP 服务器。随后在 Codex 中执行 list_tables / describe_table / execute_query 等工具即可访问 DM8。

可用工具说明

工具名 描述 关键参数
list_tables 列出指定 Schema 的所有表 schema(可选)
describe_table 显示列类型、长度、可空属性 schema(可选)、table(必填)
execute_query 执行只读 SQL schema(可选)、query(必填,只允许 SELECT/SHOW/DESCRIBE/EXPLAIN)

所有工具都会对 schema/table 名称做正则校验,并在执行前自动设置 Schema。

开发与测试指南

npm run dev   # tsx watch
npm test      # Vitest 单元测试
npm run build # 生成 dist + d.ts

默认 dmdb.outFormat = dmdb.OUT_FORMAT_OBJECT,如需兼容旧格式可在 src/utils/db.ts 修改。

常见问题

Q: 驱动安装失败怎么办? 参考达梦官方《Node.js 框架 | 达梦技术文档》,确保系统具备 snappy/snappyjs 等依赖。

Q: 可以执行 DML/DDL 吗? 当前仅允许只读操作,如需扩展请严格控制权限并补充测试。

Q: 如何反馈问题?Issues 提交或发起 PR。

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured