如何通过 MCP 将你的 Supabase 数据库连接到 Cursor

Cursor + MCP + Supabase. 图片来自作者

在过去几周里,MCP(Model Context Protocol,模型上下文协议)在许多 AI 相关的在线社区和论坛里大火。开发者和技术人员都在热议这个东西,但说实话,包括我自己在内,很多人都对 MCP 究竟是什么、它能做什么以及为什么我们应该关心它感到困惑。

为了弄清楚这个问题,我花了一些时间研究,并整理了一个真实案例,来展示 MCP 在构建 AI 工具驱动的 Web 应用时到底有多大影响力。具体来说,我会演示 MCP 如何让你轻松地将 Supabase 数据库直接连接到 Cursor IDE。

设置完成后,Cursor 代理就能自动访问你的 Supabase 数据库。这意味着你每次与 AI 助手交互时,不需要手动提供数据库上下文。这对使用 Cursor 和 Supabase 构建全栈 Web 应用的开发者来说,简直是个巨大的优势。

在正式进入教程之前,先让我简单介绍一下 MCP 是什么。

什么是 MCP?

模型上下文协议(MCP)本质上是一种标准方式,允许 AI 代理安全地访问外部数据源或上下文,而不需要每次都编写复杂的自定义代码。可以把 MCP 想象成一个万能适配器:你只需要设置一次,它就能让 AI 驱动的工具连接到几乎任何外部数据库或资源。

如果你曾尝试让 LLM(大语言模型)在现实世界中发挥作用,你可能会很快遇到一个大问题:几乎所有有用的服务,比如 Slack、GitHub,甚至是本地文件系统,都有自己独特的 API。这意味着你需要编写大量的自定义代码,让 LLM 单独适配每个 API。想要添加一个新工具?又得写一堆额外的代码。这很快就会变成一场噩梦。

[MCP 结构示意图](Image from Matt Pocock)

MCP 作为 LLM 和所有这些 API 之间的一个中间层。与其为每个工具单独编写自定义代码,MCP 允许你定义一组 LLM 可以调用的“工具”。

[MCP 运行示意图](Image from Matt Pocock)

你可以选择将 MCP 服务器远程托管,或者在本地运行。无论哪种方式,你的 LLM 只需要直接连接到 MCP 服务器,并调用它提供的工具即可。MCP 服务器会处理 API 调用,让交互变得无缝衔接。

现在,让我们从理论转向实践,尝试使用 MCP 将你的 Supabase 数据库连接到 Cursor。

如何在 Cursor 添加 MCP 服务器

1. 进入 Cursor 设置页面,在 MCP 选项卡下,点击“Add new MCP Server”(添加新 MCP 服务器)按钮。

[Cursor MCP 服务器添加界面](Screenshot of Cursor IDE using MCP. Image by author)

2. 给你的 MCP 服务器起个名字,比如“Supabase database”,然后将类型(Type)设置为 command。

[Cursor MCP 服务器命名](Screenshot of Cursor IDE using MCP. Image by author)

3. 在“Command”栏粘贴以下 CLI 命令:

npx -y @modelcontextprotocol/server-postgres <connection-string>

你可以在 Supabase 项目中获取 connection-string,方法是点击控制面板顶部的“Connect”按钮。

[Supabase 项目设置](Image of Supabase project settings. Image by author)

4. 在“Connection String”选项卡下,你会看到“Direct Connection URI”。复制它并粘贴到 MCP 命令的“Connection String”部分。

[Supabase 连接 URI](Screenshot of Supabase connection string. Image by author)

注意:URI 里有一个 YOUR-PASSWORD 部分,作为参数。你需要把它替换为你的实际数据库密码。你可以在 Project Settings > Configuration > Database > Database password 里找到数据库密码。

5. 你的 MCP 服务器参数应该像这样:

[Cursor MCP 服务器参数](Screenshot of Cursor IDE using MCP. Image by author)

6. 确认无误后,点击“Add”按钮。你会在 MCP 服务器旁边看到一个状态指示器,一旦它变成绿色,就说明一切正常!

[Cursor MCP 服务器状态指示](Screenshot of Cursor IDE using MCP. Image by author)

MCP 连接故障排除

如果连接没有立即成功,可以检查以下常见问题:

1. MCP 服务器未激活?

o 检查参数,确保连接字符串(connection string)里 没有 <> 标签,密码 也没有 [] 标签。

2. 还是不行?

o 你可能需要手动创建一个 mcp.json 文件,放在本地系统 .cursor 文件夹下。

[mcp.json 文件示例](Image by author)

mcp.json 文件的内容如下:

{

"mcpServers": {

"supabase": {

"command": "npx",

"args": ["-y", "@modelcontextprotocol/server-postgres", "<connection-string>"]

}

}

}

确保用正确的连接字符串替换 <connection-string>。完美!现在我们可以测试 MCP 服务器了。

测试 Supabase MCP 服务器

要验证我们的 Supabase MCP 服务器是否正常运行,打开一个新的 Chat Agent,并运行以下提示:

Prompt(提示):

tell me what tables have in my Supabase database

![Cursor MCP 查询数据库](Screenshot of Cursor IDE using MCP. Image by author)

如果 MCP 服务器正常工作,Cursor 的 AI 代理就会从 Supabase 数据库中提取并显示表的列表。是不是很酷?

为什么 MCP 很重要?

MCP 受到关注的原因是,它简化了数据库(比如 Supabase)和 AI 开发环境(比如 Cursor)之间的集成。如果没有 MCP,每次你和 AI 代理交互时,都必须手动输入数据库上下文。

最近,我开发了我的第一个 Web 应用 LogoToAnything,在这个过程中,我用 MCP 让 Supabase 数据库连接到了 Cursor IDE。相信我,这省去了很多时间、算力消耗(token)和不必要的麻烦。

有了 MCP,AI 助手始终可以访问数据库上下文,这意味着:

✅ 更快的响应速度

✅ 更轻松的调试体验

✅ 更快速的开发周期

这也是为什么开发者们如此兴奋 —— MCP 让复杂的集成变得简单,让你可以专注于 构建,而不是 配置。

所以,赶快试试吧,享受更流畅、更智能的编码体验! 🚀

### Python MCP Server 中 Cursor 的用法 在 Python MCP (Message Communication Protocol) 服务器中,`cursor` 是用于管理数据库查询结果的一个重要对象。它允许开发者通过编程方式执行 SQL 查询并处理返回的数据集[^1]。 以下是 `cursor` 在 Python MCP Server 连接中的典型用法: #### 建立连接与创建游标 首先需要建立到数据库连接,并从中获取一个 `cursor` 对象。这通常涉及以下几个步骤: - 使用合适的库(如 psycopg2 或 pymysql)来初始化数据库连接。 - 调用连接对象上的 `.cursor()` 方法以获得一个新的游标实例。 ```python import mcp.db as db_module # 假设这是自定义模块或者标准库的一部分 connection = db_module.connect( host="localhost", user="your_username", password="your_password", database="mcp_database" ) cursor = connection.cursor() ``` 上述代码展示了如何设置基本的数据库连接以及创建游标的过程[^3]。 #### 执行查询操作 一旦获得了游标对象,就可以调用其方法来执行各种类型的 SQL 操作,比如 SELECT、INSERT 和 UPDATE 等语句。 对于简单的读取数据场景可以这样实现: ```python query = "SELECT id, name FROM users WHERE active = %s" try: cursor.execute(query, ("true",)) # 参数化查询防止SQL注入攻击 except Exception as e: print(f"An error occurred while executing the query: {e}") else: results = cursor.fetchall() # 获取所有匹配记录 for row in results: print(row) finally: cursor.close() # 关闭游标释放资源 ``` 这里需要注意的是,在实际应用过程中应当始终考虑异常情况的发生,并采取适当措施加以应对[^2]。 #### 更新或删除数据 除了检索之外,还可以利用游标的 execute 函数来进行修改型的操作,例如更新某条特定用户的邮箱地址如下所示: ```python update_query = """UPDATE users SET email=%(email)s WHERE username=%(username)s""" data_to_update = { 'email': 'new.email@example.com', 'username': 'johndoe' } affected_rows_count = None try: affected_rows_count = cursor.execute(update_query, data_to_update) connection.commit() # 提交更改至永久存储介质上 except Exception as err_msg: connection.rollback() # 如果失败则回滚事务状态回到之前的状态 raise RuntimeError('Database update failed') from err_msg print(f"{affected_rows_count} rows were updated.") ``` 此片段说明了当尝试改变表内字段值时应遵循的最佳实践之一——即先测试再确认提交;如果出现问题,则立即撤销所做的任何潜在破坏性的变动。 最后别忘了断开已不再使用的链接以免浪费系统资源! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值