语义层服务

一个为Snowflake提供共享语义模型的MCP服务器,确保业务逻辑定义集中存储,便于仪表板、脚本和AI代理访问。

  • by aPeterHeise
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 aPeterHeise/snowflake-mcp-server

使用说明

与您的数据对话:使用MCP为Snowflake构建语义层

我们没有数据存储问题;我们有一个意义存储问题。

商业逻辑经常被困在BI工具中,创造了一个碎片化的世界,在这个世界里,AI代理可以猜测数据的含义。该项目通过引入 共享语义模型.

这是一个 主控程序 充当 语义层 对于Snowflake,确保“收入”等定义集中在一个地方——仪表板、脚本和人工智能代理都可以访问。

更多信息,请查看我的 medium.com 文章。

🧠 心理模型:译者

不要把这个软件看作是一个简单的“数据库连接器” 翻译员.

  • 输入:模棱两可的人类语言(例如,“向我展示高价值用户”)。
  • 词典(词汇表):定义“高价值”的含义(例如,贷款价值比>500美元)。
  • 语法(数据模型):定义表之间的关系。
  • 输出:精确的Snowflake SQL。

此MCP服务器位于在中间。它使用术语表提供的上下文构建查询,允许LLM智能地“对话”您的数据。

🚀 特性

  • 语义理解:使用术语表定义“高价值客户”或“流失客户”等术语,确保LLM理解您的业务逻辑。
  • LLM到SQL:将用户问题转换为SQL查询(当前模拟)。
  • MCP集成:设计用于MCP客户端(如Claude Desktop或其他AI代理)。

✨ 成功案例

用户提出了一个问题:

2.模型执行查询和答案:

📂 项目结构

该项目被构建为一个独立的Python微服务:

  • src/server.py:MCP服务器的入口点。暴露 ask_data 工具。
  • src/语义/:应用程序的“大脑”。
    • glossary.yaml:你的定义文件(“真相”)。
    • model.py:Pydantic模型用于验证术语表。
    • loader.py:加载和验证术语表的逻辑。
  • src/llm/:
    • generator.py:转换自然语言+术语表的逻辑->SQL。
  • src/database.py:雪花连接和原始执行逻辑。

🛠️ 入门指南

先决条件

  • Python 3.10或更高版本
  • 雪花账户
  • 一个OpenAI API密钥

安装

  1. 克隆仓库:

    git clone <repository-url>
    cd snowflake-mcp-server
    
  2. 安装依赖项:

    pip install -e .
    
  3. 配置环境变量: 创建 .env 文件,并填写您的Snowflake凭据和OpenAI API密钥。

    cp .env.example .env
    

    所需详细信息:

    SNOWFLAKE_USER=myuser
    SNOWFLAKE_PASSWORD=mypassword
    SNOWFLAKE_ACCOUNT=myaccount
    SNOWFLAKE_ROLE=myrole
    SNOWFLAKE_WAREHOUSE=mywarehouse
    SNOWFLAKE_DATABASE=mydatabase
    SNOWFLAKE_SCHEMA=myschema
    OPENAI_API_KEY=sk-proj-...
    

运行服务器

您可以直接使用Python(FastMCP)运行服务器:

python src/server.py

或者配置您的MCP客户端以运行此命令。

与Claude Desktop一起使用

将以下内容添加到您的 ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "snowflake-explorer": {
      "command": "/ABSOLUTE/PATH/TO/snowflake-mcp-server/.venv/bin/python",
      "args": [
        "/ABSOLUTE/PATH/TO/snowflake-mcp-server/src/server.py"
      ],
      "env": {
        "OPENAI_API_KEY": "sk-proj-...",
        "SNOWFLAKE_USER": "...",
        "SNOWFLAKE_PASSWORD": "...",
        "SNOWFLAKE_ACCOUNT": "..."
      }
    }
  }
}

注意:一定要更换 /ABSOLUTE/PATH/TO 带有项目文件夹的实际路径。

📖 用法

定义术语表

语义层的核心在 src/semantic/glossary.yaml。这就是你教系统你的商业语言的地方。

示例 glossary.yaml:

tables:
  - name: FACT_ORDERS
    description: "All transactional records"
    columns:
      - name: AMOUNT
        description: "Total transaction value in USD"

metrics:
  - name: "High Value Customer"
    definition: "A customer with total spend > $1000 in the last 365 days"

🚧 发展现状及下一步

下一个即时任务:

  1. 实施 SNOWFLAKE_AUTHENTICATOR=externalbrowser 以实现更安全的本地开发(SSO)。