【TRAE技巧分享】手把手教你启用MSSQL MCP服务,实现自然语言操控SQL Server

哈喽各位TRAE小伙伴!:waving_hand: 相信很多同学在用TRAE时,都会遇到需要操作SQL Server数据库的场景——手动写SQL繁琐又容易出错,尤其是面对复杂查询时,耗时又费力。

今天就给大家带来一份超详细的实战技巧,手把手教你在TRAE中启用MSSQL MCP服务,只需用自然语言描述需求,就能让TRAE自动执行SQL查询、增删改操作,大幅提升开发和办公效率,新手也能轻松上手!:rocket:

话不多说,直接上干货,全程实操无废话,跟着做就能成功启用~

一、前言(为什么要启用MSSQL MCP服务?)

TRAE的MCP(Model Context Protocol)服务就像是它的“外挂插件系统”,能让TRAE连接各类工具和服务,拓展更多实用功能。而启用MSSQL MCP服务后,我们无需手动编写SQL语句,只要用自然语言和TRAE对话,比如“查询某数据库的用户信息”“创建一张新表”,TRAE就能自动调用工具执行对应操作,尤其适合经常和SQL Server打交道的小伙伴,能省不少时间!

本文整理了完整的启用流程,从环境准备、核心配置到常见问题排查,全部清晰说明,确保大家能一次成功,顺利实现自然语言与SQL Server的无缝交互。

二、环境准备(必看!缺一不可)

在开始配置前,先确认以下环境已准备到位,避免后续踩坑:

  1. Node.js环境:请确保已安装Node.js(推荐v18+版本),并配置好环境变量(安装后可在终端输入node -v验证是否生效)。

  2. SQL Server实例:拥有本地或远程的SQL Server实例(本文以通用示例SQLSERVER-INSTANCE为例),必须启用“混合认证模式”,同时确保sa账号可用(后续用于数据库连接)。

  3. MCP服务目录:创建一个专门的服务目录,用于存放MSSQL MCP服务的代码和依赖,示例路径:D:\Trae\mcps\mssql_mcp_server(可根据自己的电脑路径调整)。

三、核心配置步骤(全程实操,一步不落)

步骤1:初始化Node.js项目,安装依赖

打开终端(建议用PowerShell),切换到我们刚才创建的MCP服务目录,执行以下命令,完成项目初始化和依赖安装,全程自动完成,耐心等待即可:

cd "D:\Trae\mcps\mssql_mcp_server"
npm init -y
npm install @modelcontextprotocol/sdk mssql

步骤2:编写MCP stdio协议版服务代码

在服务目录下,创建一个名为server.js的文件(注意文件名不能错),复制以下代码粘贴进去即可。这份代码是适配TRAE客户端的stdio协议版本,已优化配置逻辑,无需修改核心代码,后续只需在TRAE中配置环境变量即可。

const { Server } = require('@modelcontextprotocol/sdk/server/index.js');
const { StdioServerTransport } = require('@modelcontextprotocol/sdk/server/stdio.js');
const {
  CallToolRequestSchema,
  ListToolsRequestSchema,
} = require('@modelcontextprotocol/sdk/types.js');
const sql = require('mssql');

// 从环境变量读取数据库配置(后续在TRAE中配置,无需修改此处)
const config = {
  server: process.env.MSSQL_SERVER || 'localhost',
  port: parseInt(process.env.MSSQL_PORT || '1433'),
  database: process.env.MSSQL_DATABASE || 'master',
  user: process.env.MSSQL_USER || 'sa',
  password: process.env.MSSQL_PASSWORD || '',
  options: {
    encrypt: process.env.MSSQL_ENCRYPT === 'true',
    trustServerCertificate: process.env.MSSQL_TRUST_SERVER_CERTIFICATE === 'true',
    connectTimeout: 10000
  }
};

// 创建MCP服务器
const server = new Server(
  {
    name: 'mssql-mcp',
    version: '1.0.0',
  },
  {
    capabilities: {
      tools: {},
    },
  }
);

// 定义可用工具(TRAE可调用的SQL操作功能)
server.setRequestHandler(ListToolsRequestSchema, async () => {
  return {
    tools: [
      {
        name: 'query_sql',
        description: '执行SQL查询并返回结果集(适合查询数据,如查询用户、订单信息)',
        inputSchema: {
          type: 'object',
          properties: {
            sql: {
              type: 'string',
              description: '要执行的SQL查询语句',
            },
          },
          required: ['sql'],
        },
      },
      {
        name: 'execute_sql',
        description: '执行SQL命令(适合增删改操作,如创建表、插入数据、删除记录)',
        inputSchema: {
          type: 'object',
          properties: {
            sql: {
              type: 'string',
              description: '要执行的SQL命令',
            },
          },
          required: ['sql'],
        },
      },
    ],
  };
});

// 处理TRAE的工具调用请求(核心逻辑,无需修改)
server.setRequestHandler(CallToolRequestSchema, async (request) => {
  try {
    const { name, arguments: args } = request.params;

    if (!args.sql) {
      throw new Error('缺少参数:sql,请确保输入正确的SQL语句');
    }

    await sql.connect(config);

    // 处理查询请求
    if (name === 'query_sql') {
      const result = await sql.query(args.sql);
      await sql.close();
      return {
        content: [{ type: 'text', text: JSON.stringify({ success: true, data: result.recordset }, null, 2) }],
      };
    } 
    // 处理增删改请求
    else if (name === 'execute_sql') {
      const result = await sql.query(args.sql);
      await sql.close();
      return {
        content: [{ type: 'text', text: JSON.stringify({ success: true, rows_affected: result.rowsAffected[0] }, null, 2) }],
      };
    } 
    // 未知工具处理
    else {
      throw new Error(`未知工具:${name},请确认工具名称是否正确`);
    }
  } catch (err) {
    return {
      content: [{ type: 'text', text: `错误:${err.message}` }],
      isError: true,
    };
  } finally {
    await sql.close(); // 确保数据库连接关闭,避免占用资源
  }
});

// 启动MCP服务(stdio模式,适配TRAE客户端)
async function main() {
  const transport = new StdioServerTransport();
  await server.connect(transport);
}

main().catch((err) => {
  console.error('MSSQL MCP服务启动失败:', err);
  process.exit(1);
});

步骤3:在TRAE中配置MCP服务

这一步是关键,配置正确才能让TRAE识别并启用MSSQL MCP服务,操作如下:

  1. 打开TRAE,找到MCP服务管理面板,点击“添加服务”;

  2. 按照以下配置填写(重点核对路径和环境变量,避免出错):

    1. 命令:node

    2. 参数:[“D:\\Trae\\mcps\\mssql_mcp_server\\server.js”](注意路径要和你创建的服务目录一致,双反斜杠不能少)

    3. 环境变量:复制以下JSON,替换其中的示例值为你的实际数据库配置(如服务器地址、数据库名、sa密码):
      {
      "MSSQL_SERVER": "SQLSERVER-INSTANCE", // 你的SQL Server实例名称
      "MSSQL_PORT": "1433", // 数据库端口,默认1433
      "MSSQL_DATABASE": "DEFAULT_DB", // 要连接的数据库名称
      "MSSQL_USER": "sa", // 数据库登录账号(默认sa)
      "MSSQL_PASSWORD": "YourStrongPassword123!", // 你的sa密码
      "MSSQL_ENCRYPT": "false", // 本地数据库建议设为false
      "MSSQL_TRUST_SERVER_CERTIFICATE": "true" // 跳过本地证书验证,避免连接失败
      }

  3. 填写完成后,保存配置,进入下一步验证。

步骤4:启动并验证服务(确认是否成功)

配置完成后,按照以下步骤验证服务是否正常启用,避免后续无法使用:

  1. 清理残留进程:打开PowerShell,执行以下命令,终止之前可能残留的node进程(避免端口占用):
    taskkill /F /IM node.exe

  2. 重启TRAE,回到MCP服务面板,等待1-2分钟,面板会从「准备中」变为「已就绪」(显示绿色对勾),说明服务启动成功;

  3. 测试调用:在TRAE聊天框中输入自然语言指令,比如“查询DEFAULT_DB数据库中SQL Server的版本”,TRAE会自动调用query_sql工具执行SQL,返回查询结果,就说明配置完全没问题啦!

四、常见问题及解决方案(避坑必备)

相信很多同学在配置过程中会遇到一些小问题,这里整理了4个最常见的问题,附上详细解决方案,帮大家快速排查,少走弯路:

1. 端口占用(EADDRINUSE)

  • 现象:启动服务时报错“listen EADDRINUSE: address already in use”,提示端口被占用;

  • 解决方案

    • 方法1:终止占用端口的进程,执行命令“taskkill /F /PID <占用进程PID>”(PID可通过任务管理器查看);

    • 方法2:若不想终止进程,可参考HTTP版逻辑,在代码中添加自动检测空闲端口的功能(适合有一定代码基础的同学)。

2. 数据库连接失败(ELOGIN)

  • 现象:sa账号登录失败,错误信息为“用户’sa’ 登录失败”;

  • 解决方案

    • 确认SQL Server已启用「混合认证模式」(打开SSMS,右键服务器→属性→安全性,勾选“SQL Server和Windows身份验证模式”);

    • 核对sa密码,确保和TRAE环境变量中配置的密码一致,避免输入错误;

    • 确保环境变量中“MSSQL_TRUST_SERVER_CERTIFICATE”设为“true”,跳过本地证书验证(本地数据库必设)。

3. JSON解析错误(Unexpected token)

  • 现象:MCP客户端报错“Unexpected token ‘�’, “:magnifying_glass_tilted_left: 开始测试数据库连接…” is not valid JSON”;

  • 解决方案

    • 删除server.js中所有的console.log、console.error等控制台日志(非JSON格式的输出会导致TRAE解析失败);

    • 确保服务端输出仅为MCP协议所需的JSON消息,不要添加任何多余的打印内容。

4. MCP面板一直显示“准备中”

  • 现象:重启TRAE后,MCP服务面板一直显示「准备中」,无任何响应;

  • 解决方案

    • 核心原因:使用了HTTP版服务代码,与TRAE的MCP stdio协议不兼容(很多同学会踩这个坑);

    • 最终方案:直接使用本文提供的stdio协议版server.js代码,通过标准输入输出与TRAE通信,替换后重启TRAE即可解决。

五、使用技巧(提升效率,避坑指南)

服务启用成功后,分享几个实用小技巧,帮大家更好地利用MSSQL MCP服务,提升使用体验:

  1. 查询数据:在TRAE中直接输入自然语言,比如“帮我查询DEFAULT_DB数据库中所有用户的信息”“查询近30天的订单数据”,TRAE会自动调用query_sql工具,生成并执行SQL,返回结构化结果;

  2. 执行命令:输入“在DEFAULT_DB中创建新表TestTable,包含ID(主键)和Name字段”“删除TestTable中ID为1的记录”,TRAE会调用execute_sql工具执行对应操作,无需手动写SQL;

  3. 注意事项

    1. SQL语句会自动生成,但建议复杂操作前,先让TRAE展示生成的SQL,确认无误后再执行,避免误操作;

    2. 敏感操作(如删除数据、修改表结构),建议提前备份数据库,防止数据丢失;

    3. 确保数据库配置信息安全,不要随意分享包含sa密码的环境变量配置。

六、总结与互动

以上就是在TRAE中启用MSSQL MCP服务的完整流程啦!其实操作并不复杂,核心就是3步:准备环境→配置代码→在TRAE中设置服务,只要按照步骤来,新手也能一次成功。

启用后,大家就能彻底摆脱手动写SQL的麻烦,用自然语言就能操控SQL Server,不管是日常开发还是办公查询,都能节省大量时间,这也是TRAE提升效率的核心技巧之一。

最后,欢迎大家在评论区交流互动:backhand_index_pointing_down:

  • 你在配置过程中遇到了什么问题?

  • 还有哪些TRAE MCP服务的实用技巧?

  • 你平时用TRAE做什么场景的开发或办公?

一起交流学习,让更多人掌握TRAE的实用技巧,解锁更多高效玩法~:flexed_biceps:

#技巧分享 #TRAE实用技巧 #MSSQL操作技巧

3 个赞

太强了,大佬 :saluting_face:

2 个赞

学习到了,不过我一般直接用个带ui界面的工具连上数据库,直接操作

3 个赞

为什么我没有sa密码,怎么设置的

2 个赞

sa 是 SQL Server 默认的管理员账号,安装时如果没有手动设置过密码,有两种常见情况:

  1. 安装时选了"Windows 身份验证模式"——这时候 sa 账号是禁用的。需要先切换到混合模式,再给它设置密码,操作:打开 SSMS → 右键服务器 → 属性 → 安全性 → 选"SQL Server 和 Windows 身份验证模式" → 确定 → 重启 SQL Server → 然后在"安全性 → 登录名"里找到 sa → 右键属性设置新密码。

  2. 之前装过但从来没动过 sa——直接按上面的方式设个强密码就行。

如果公司数据库是托管的、没有 sa 权限,也可以用 Windows 身份验证(MSSQL_TRUST_SERVER_CERTIFICATE 设 true,user 换成你的 Windows 用户名,不需要密码)。不过这种情况要确认 SQL Server 支持 Windows 认证才行。

1 个赞

这篇教程很实操,按步骤做基本能跑起来。我补一个特别重要、但很容易被忽略的点:

自然语言操控数据库,最先要想的不是“能不能连上”,而是“连上之后允许它做什么”。

因为一旦接通 MSSQL MCP,AI 理论上就不只是查数据,还可能执行写入、删除、表结构变更之类的操作。演示环境里看起来很方便,放到真实业务环境里风险就完全不一样了。

所以我建议至少做三层防护:

  1. 默认只给只读账号
    如果只是查数、分析、生成报表,优先给 SELECT 权限,不要一上来就给全量写权限。

  2. 写操作单独走确认机制
    哪怕技术上能执行 UPDATE / DELETE,也尽量要求 AI 先生成 SQL,再由人确认后执行,而不是直接放开“自然语言即落库”。

  3. 先在测试库跑通再碰正式库
    很多问题不是 SQL 不会写,而是上下文理解偏了——比如把“停用”理解成“删除”,把“查最近数据”理解成“查全部数据”。先在测试环境验证一轮,能挡掉很多事故。

所以这类 MCP 真正的门槛,不是安装,而是权限设计。

装得上只是第一步,让 AI 在数据库前面“只做该做的事”,这一步才决定它到底是提效工具,还是事故放大器。

2 个赞