support-rules-mcp

support-rules-mcp

A Snowflake-hosted MCP server that provides comprehensive rules for troubleshooting Snowflake issues, building stored procedures, and creating reproductions.

Category
访问服务器

README

Snowflake Rules Engine - MCP Server

License Snowflake

A Snowflake-hosted MCP server that provides comprehensive rules for troubleshooting Snowflake issues, building stored procedures, and creating reproductions. Uses Cortex Search for semantic search and Cortex Analyst for natural language queries.

Note: This is an internal Snowflake project designed for support engineering workflows. It requires access to Snowflake's internal systems and data.

🎯 Purpose

This Rules Engine serves as a single source of truth for Snowflake troubleshooting knowledge across multiple projects. It provides:

  • DPO → Table Mappings: How Snowflake objects map to Snowhouse tables
  • Source Code Access: GitHub MCP patterns for exploring Snowflake repositories
  • Documentation Access: Snowflake Docs MCP patterns for official guidance
  • Code Quality: Context7 MCP patterns for examples and best practices
  • Investigation Workflows: Systematic troubleshooting procedures
  • SQL Patterns: Efficient Snowhouse querying techniques

🏗️ Architecture

Snowflake Components

┌─────────────────────────────────────────────────────┐
│                    Cursor AI                        │
│                                                     │
│  ┌───────────────────────────────────────────────┐ │
│  │         MCP Client (snow mcp connect)         │ │
│  └───────────────┬───────────────────────────────┘ │
└──────────────────┼─────────────────────────────────┘
                   │
                   ▼
┌─────────────────────────────────────────────────────┐
│         Snowflake MCP Server                        │
│         (temp.support_sp_dev.support_rules_mcp)     │
│                                                     │
│  ┌─────────────────────┐  ┌─────────────────────┐  │
│  │  get-snowflake-rule │  │ list-snowflake-rules│  │
│  │  (Cortex Search)    │  │  (Cortex Analyst)   │  │
│  └──────────┬──────────┘  └──────────┬──────────┘  │
└─────────────┼────────────────────────┼─────────────┘
              │                        │
              ▼                        ▼
   ┌─────────────────────┐  ┌─────────────────────┐
   │   rules_search      │  │   rules_metadata    │
   │ (Cortex Search)     │  │  (Semantic View)    │
   └──────────┬──────────┘  └──────────┬──────────┘
              │                        │
              └────────────┬───────────┘
                           ▼
                  ┌─────────────────┐
                  │   rules table   │
                  │  (42 rules)     │
                  └─────────────────┘

Rules Hierarchy

rules/
├── _meta/                     # Meta-rules (composite workflows)
│   ├── troubleshooting.mdc   # Complete troubleshooting workflow
│   ├── stored-procedures.mdc # Complete SP generation workflow
│   └── reproductions.mdc     # Complete reproduction workflow
│
├── core/                      # Core knowledge (reusable)
│   ├── 01-github-mcp.mdc     # Source code access patterns
│   ├── 02-docs-mcp.mdc       # Documentation access patterns
│   ├── 03-code-quality-mcp.mdc # Code examples and best practices
│   ├── 04-dpo-mappings.mdc   # DPO→table mappings (critical!)
│   └── 05-snowhouse-querying.mdc # Query patterns
│
├── workflows/                 # Workflow-specific guidance
│   ├── troubleshooting.mdc   # Investigation workflows
│   ├── stored-procedures.mdc # SP generation patterns
│   └── reproductions.mdc     # Reproduction building
│
├── connectors/                # Connector-specific rules (11 files)
│   ├── python.mdc
│   ├── jdbc.mdc
│   └── ...
│
└── spcs/                      # SPCS-specific rules (10 files)
    ├── architecture.mdc
    └── ...

🚀 Quick Start

1. Configure Cursor MCP

Add to your Cursor MCP configuration (~/.cursor/mcp.json or Cursor Settings → MCP):

{
  "mcpServers": {
    "snowflake-rules": {
      "command": "snow",
      "args": [
        "mcp",
        "connect",
        "--connection",
        "snowhouse",
        "--mcp-server",
        "temp.support_sp_dev.support_rules_mcp"
      ],
      "env": {}
    }
  }
}

2. Restart Cursor

Restart Cursor to load the MCP server.

3. Use the Rules

In Cursor chat, ask questions about Snowflake troubleshooting:

"How do I troubleshoot Python connector authentication issues?"
"Show me the DPO mappings for image repositories"
"What are the best practices for writing stored procedures?"

Cursor AI will automatically call the MCP tools to retrieve relevant rules.

📊 What's Deployed

Objects Created

  • Database: temp
  • Schema: support_sp_dev
  • Table: rules (42 rules: 14 core, 11 connector, 10 spcs, 7 workflow)
  • Cortex Search: rules_search (semantic search over all rules)
  • Semantic View: rules_metadata (queryable metadata)
  • MCP Server: support_rules_mcp (2 tools)

MCP Tools Available

  1. get-snowflake-rule - Search and retrieve rule content

    • Type: CORTEX_SEARCH_SERVICE_QUERY
    • Query examples: "troubleshooting", "dpo mappings", "python connector"
    • Filter by rule_type: meta, core, connector, spcs, workflow
  2. list-snowflake-rules - List and discover available rules

    • Type: CORTEX_ANALYST_MESSAGE
    • Natural language queries: "list all rules", "show me connector rules", "how many core rules?"

Access

  • Roles with access: ENGINEER, ENGINEER_BASIC
  • Owner: SUPPORT_ENGINEER

🔧 Setup & Deployment

Initial Setup (Run Once)

# 1. Create rules table
snow sql -c snowhouse -f sql/01_create_table.sql

# 2. Upload rules from local files
python upload_rules.py

# 3. Create Cortex Search service
snow sql -c snowhouse -f sql/02_create_single_service.sql

# 4. Force immediate indexing (or wait ~1 hour)
snow sql -c snowhouse -f sql/04_force_refresh.sql

# 5. Create semantic view for Cortex Analyst
snow sql -c snowhouse -f sql/05_create_semantic_view.sql

# 6. Create MCP server
snow sql -c snowhouse -f sql/06_create_mcp_server.sql

# 7. Test the setup
snow sql -c snowhouse -f sql/test_queries.sql

Update Workflow

When rules need updating:

# 1. Edit rules locally in rules/ directory
vim rules/core/04-dpo-mappings.mdc

# 2. Upload changes to Snowflake
python upload_rules.py

# 3. Force immediate refresh
snow sql -c snowhouse -f sql/04_force_refresh.sql

🎯 Use Cases

1. Troubleshooting Project

Goal: Investigate why a customer's SPCS image repository creation is failing.

In Cursor:

"Load troubleshooting rules for SPCS image repository issues"

Workflow:

  1. Check docs: mcp_snowflake-docs_CKESnowflakeDocs("SPCS image repository")
  2. Query Snowhouse: Check stage_etl_v with stage_type = 'IMAGE_REPOSITORY' (not a dedicated table!)
  3. Search source: mcp_github_search_code("imageRepositoryDPO repo:snowflakedb/snowflake")
  4. Analyze logs: Get timestamps from job_etl_v, query gs_logs_v with bounds

2. Stored Procedure Project

Goal: Create a procedure that retrieves failed queries for a ticket.

In Cursor:

"Help me write a stored procedure to query failed jobs in Snowhouse"

Workflow:

  1. Map requirements: Failed queries → job_etl_v
  2. Get examples: mcp_context7_get-library-docs("/snowflakedb/snowpark-python", "stored procedures")
  3. Build query: Start with job_etl_v, filter by account_id and error_code
  4. Write procedure: Use type hints, error handling, logging
  5. Test and document

3. Reproduction Project

Goal: Reproduce a Python connector authentication issue.

In Cursor:

"Show me how to create a minimal reproduction for a Python connector auth bug"

Workflow:

  1. Check docs: mcp_snowflake-docs_CKESnowflakeDocs("authentication methods")
  2. Find source: mcp_github_search_code("auth repo:snowflakedb/snowflake-connector-python")
  3. Get examples: mcp_context7_get-library-docs("/snowflakedb/snowflake-connector-python", "authentication")
  4. Build minimal repro: Self-contained, runnable code
  5. Verify and document

🔍 Maintenance

View Recent Updates

SELECT rule_name, rule_type, version, updated_at
FROM temp.support_sp_dev.rules
ORDER BY updated_at DESC
LIMIT 10;

Find Rules by Keyword

SELECT rule_name, rule_type, rule_description
FROM temp.support_sp_dev.rules
WHERE rule_content ILIKE '%keyword%';

Check Rule Statistics

SELECT 
    rule_type,
    COUNT(*) AS count,
    AVG(LENGTH(rule_content)) AS avg_size
FROM temp.support_sp_dev.rules
GROUP BY rule_type;

Refresh Search Index

ALTER CORTEX SEARCH SERVICE temp.support_sp_dev.rules_search REFRESH;

🚨 Critical Knowledge

The #1 Mistake: Stage-Backed Objects

NOT ALL OBJECTS HAVE DEDICATED TABLES!

These objects use stage_etl_v:

  • ❌ WRONG: image_repository_etl_v (doesn't exist!)
  • ✅ RIGHT: stage_etl_v with stage_type = 'IMAGE_REPOSITORY'

Stage-backed objects:

  • Image repositories → stage_etl_v with stage_type = 'IMAGE_REPOSITORY'
  • Git repositories → stage_etl_v with stage_type = 'GIT_REPOSITORY'
  • Named stages → stage_etl_v with stage_type = 'INTERNAL'
  • External stages → stage_etl_v with stage_type IN ('S3', 'AZURE', 'GCS')

💡 Key Principles

For All Projects:

  1. ALWAYS use GitHub MCP for source code (never local paths)
  2. ALWAYS use Snowflake Docs MCP for official documentation
  3. ALWAYS filter Snowhouse queries by account_id
  4. ALWAYS start with job_etl_v for timestamps
  5. ALWAYS check if objects are stage-backed

For Code Projects (SP & Repro):

  1. ALWAYS use Context7 MCP for code examples
  2. ALWAYS include type hints and error handling
  3. ALWAYS validate inputs and add logging

🎯 Benefits

vs Local Python MCP Server

  • ✅ No Python environment setup needed
  • ✅ Works for all users with ENGINEER role
  • ✅ Centralized rule management
  • ✅ Automatic scaling and availability
  • ✅ Version tracking in the database
  • ✅ Semantic search built-in

🛠️ Troubleshooting

MCP Server Not Found

# List available MCP servers
snow sql -c snowhouse -Q "SHOW MCP SERVERS IN SCHEMA temp.support_sp_dev;"

Search Not Finding Rules

# Force immediate refresh
snow sql -c snowhouse -f sql/04_force_refresh.sql

Permission Denied

# Check grants
snow sql -c snowhouse -Q "SHOW GRANTS ON MCP SERVER temp.support_sp_dev.support_rules_mcp;"

Upload Failed

# Check connection
snow connection test --connection snowhouse

# Verify table exists
snow sql -c snowhouse -Q "SELECT COUNT(*) FROM temp.support_sp_dev.rules;"

🔀 Alternative Implementations

The main approach uses a single unified Cortex Search service for all rules, which is recommended for most use cases.

An alternative multi-service approach is available in sql/alternatives/ that creates separate Cortex Search services for each rule type (meta, core, connector, spcs, workflow). This provides more granular control but increases complexity.

When to consider alternatives:

  • Need different refresh schedules per rule type
  • Want to grant access to specific rule categories only
  • Require strict separation between rule types

See sql/alternatives/README.md for details and trade-offs.

📁 Project Structure

.
├── sql/                          # Setup SQL scripts
│   ├── 01_create_table.sql       # Create rules table
│   ├── 02_create_single_service.sql # Create Cortex Search
│   ├── 04_force_refresh.sql      # Force indexing
│   ├── 05_create_semantic_view.sql # Create semantic view
│   ├── 06_create_mcp_server.sql  # Create MCP server
│   ├── test_queries.sql          # Validation queries
│   └── alternatives/             # Alternative implementations
│       └── README.md             # Multi-service approach
│
├── rules/                        # Rule content (42 .mdc files)
│   ├── _meta/                    # Meta-rules
│   ├── core/                     # Core knowledge
│   ├── workflows/                # Workflow guidance
│   ├── connectors/               # Connector-specific
│   └── spcs/                     # SPCS-specific
│
├── upload_rules.py               # Upload script
├── rules_semantic_model.yaml     # Cortex Analyst model
├── cursor-mcp-config.json        # Cursor MCP configuration
├── README.md                     # This file
├── QUICK_START.md                # Fast setup guide
│
└── archive/                      # Archived implementations
    └── python-mcp-server/        # Original Python MCP server

⚡ Quick Reference

Most Common Rules

Rule Purpose
_meta/troubleshooting.mdc Complete troubleshooting setup
_meta/stored-procedures.mdc Complete SP development setup
core/04-dpo-mappings.mdc Object→table mappings
core/05-snowhouse-querying.mdc Query patterns

Most Common Mappings

Object Table Filter
Image Repository stage_etl_v stage_type = 'IMAGE_REPOSITORY'
Git Repository stage_etl_v stage_type = 'GIT_REPOSITORY'
Query job_etl_v start_time range
Warehouse warehouse_etl_v warehouse_name

MCP Server Quick Reference

# From Cursor - these tools are called automatically
mcp_snowflake-rules_get-snowflake-rule(query="troubleshooting", filter={...})
mcp_snowflake-rules_list-snowflake-rules(message="list all core rules")

📞 Support

  • Issues: File in your internal issue tracker
  • Updates: Rules are updated centrally and automatically available
  • Questions: Check existing rules first, then ask for help
  • Alternative: Python MCP server available in archive/python-mcp-server/

Status: ✅ Production Ready
Last Updated: 2025-10-10
Rules Count: 42 (14 core, 11 connector, 10 spcs, 7 workflow)
Maintained by: Snowflake Support Engineering


Maintaining Snowflake's troubleshooting knowledge base for consistent, efficient investigations across all projects.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选