Token导航 LogoToken导航TokenDH.com
drill MCP logo
数据服务stdio官方级别未说明来源级核验

drill MCP

MCP Server

一个用于Apache Drill的模型上下文协议(MCP)服务器,提供查询执行、存储插件管理和元数据发现等功能,适用于数据分析和集成场景。

工具数

15

提示词数

0

GitHub Stars

0

资源数

0
数据分析PythonClaudeClaude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

cgivre

提供方

cgivre

最后核验

2026/5/17 20:20

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

pip install -e ".[dev]"

详细介绍

钻孔MCP服务器

适用于Apache Drill的强大、生产就绪的模型上下文协议(MCP)服务器。该服务器实现了Claude和Apache Drill之间的无缝集成,为查询执行、存储插件管理和元数据发现提供了全面的工具。

特性

查询执行

  • 对Apache Drill执行SQL查询
  • 查询状态监控
  • 查询取消
  • 可配置超时

存储插件管理

  • 列出所有已配置的存储插件
  • 获取存储插件配置
  • 创建/更新存储插件
  • 删除存储插件
  • 启用/禁用存储插件

元数据发现

  • 列出所有数据库/模式
  • 列出数据库中的表
  • 获取包含列信息的详细表架构
  • 从表中检索示例数据
  • 按名称模式搜索表
  • 获取存储插件信息

健康监测

  • 用于服务器状态验证的健康检查端点

安装

先决条件

  • Python 3.10或更高版本
  • Apache Drill服务器正在运行并可访问
  • pip或pip3

设置

  1. 克隆存储库:
git clone https://github.com/yourusername/drill-mcp.git
cd drill-mcp
  1. 在开发模式下安装软件包:
pip install -e ".[dev]"

或者对于生产安装:

pip install .

配置

环境变量

使用环境变量配置Drill连接:

# Drill server connection
export DRILL_HOST=localhost        # Default: localhost
export DRILL_PORT=8047             # Default: 8047
export DRILL_USERNAME=your_user    # Optional: username for authentication
export DRILL_PASSWORD=your_pass    # Optional: password for authentication

使用Claude代码

要将此MCP服务器与Claude Code一起使用,请将其添加到您的Claude Code配置中:

  1. 获取drill mcp目录的绝对路径
  2. 添加到您的Claude Code配置文件中:
{
  "mcpServers": {
    "drill": {
      "type": "stdio",
      "command": "python",
      "args": ["-m", "drill_mcp.server"],
      "env": {
        "DRILL_HOST": "localhost",
        "DRILL_PORT": "8047"
      }
    }
  }
}

用法

启动服务器

python -m drill_mcp.server

或者直接:

drill-mcp-server

可用工具

所有工具均以以下格式返回响应:

{
  "success": true/false,
  "result": {...},
  "error": "error message if success is false"
}

查询工具

execute_query

  • 执行SQL查询
  • 参数: query (字符串), timeout (int,可选)
  • 返回:包含行数据的查询结果

查询状态

  • 获取正在运行的查询的状态
  • 参数: query_id (字符串)
  • 返回:查询状态信息

cancel_query

  • 取消正在运行的查询
  • 参数: query_id (字符串)
  • 退货:取消确认

存储插件工具

list_storage_plugins

  • 列出所有存储插件
  • 返回:插件配置数组

get_storage_plugin

  • 获取特定插件配置
  • 参数: name (字符串)
  • 返回:插件配置

create_storage_plugin

  • 创建或更新插件
  • 参数: name (字符串), config (JSON字符串)
  • 返回:已更新配置

delete_storage_plugin

  • 删除插件
  • 参数: name (字符串)
  • 返回:确认删除

enable_storage_plugin

  • 启用插件
  • 参数: name (字符串)
  • 返回:已更新配置

disable_storage_plugin

  • 禁用插件
  • 参数: name (字符串)
  • 返回:已更新配置

元数据工具

列表_数据库

  • 列出所有数据库/模式
  • 返回值:包含表计数的数据库信息数组

list_tables

  • 列出数据库中的表
  • 参数: database (字符串)
  • 返回:表名数组

get_table_schema

  • 获取表的详细架构
  • 参数: database (字符串), table (字符串)
  • 返回:包含类型和元数据的列信息

get_table_sample_data

  • 从表中获取示例行
  • 参数: database (字符串), table (字符串), limit (int,默认值:5)
  • 返回:样本行数组

search_tables

  • 按名称模式搜索表
  • 参数: pattern (字符串)
  • 返回:具有数据库信息的匹配表数组

get_storage_plugin_info

  • 获取有关所有存储插件的信息
  • 返回:插件信息数组

系统工具

健康检查

  • 检查服务器运行状况并演练连接
  • 返回:健康状态和插件计数

例子

执行查询

# Using the client directly
from drill_mcp.client import DrillClient

client = DrillClient(host="localhost", port=8047)
result = client.execute_query("SELECT * FROM dfs.`/data/users.json`")
print(f"Rows returned: {len(result.rows)}")

列出数据库

from drill_mcp.client import DrillClient
from drill_mcp.metadata import MetadataGatherer

client = DrillClient()
metadata = MetadataGatherer(client)
databases = metadata.get_all_databases()
for db in databases:
    print(f"{db.name}: {len(db.tables)} tables")

管理存储插件

from drill_mcp.client import DrillClient

client = DrillClient()

# List plugins
plugins = client.list_storage_plugins()

# Create a new plugin
config = {
    "type": "file",
    "connection": "file:///data",
    "enabled": True
}
client.create_storage_plugin("my_data", config)

# Enable/Disable
client.enable_storage_plugin("my_data")
client.disable_storage_plugin("my_data")

测试

运行测试套件:

# Run all tests
pytest

# Run with coverage
pytest --cov=drill_mcp tests/

# Run specific test file
pytest tests/test_client.py

# Run specific test
pytest tests/test_client.py::TestDrillClientInitialization::test_init_with_defaults

测试覆盖率

该项目包括全面的单元测试,包括:

  • 客户端初始化和配置
  • 查询执行和状态监控
  • 存储插件管理
  • 元数据收集和搜索
  • MCP服务器工具执行
  • 错误处理和边缘情况

当前测试覆盖率: 90%+

项目结构

drill-mcp/
├── drill_mcp/
│   ├── __init__.py           # Package initialization
│   ├── client.py             # Drill REST API client
│   ├── metadata.py           # Metadata gathering utilities
│   └── server.py             # MCP server implementation
├── tests/
│   ├── __init__.py
│   ├── conftest.py           # Pytest configuration
│   ├── test_client.py        # Client tests
│   ├── test_metadata.py      # Metadata tests
│   └── test_server.py        # Server tests
├── pyproject.toml            # Project configuration
├── README.md                 # This file
├── CONTRIBUTING.md           # Contributing guidelines
├── LICENSE                   # Apache 2.0 License
└── .gitignore               # Git ignore file

建筑

组件

  1. DrillClient (client.py)

- Apache Drill的REST API包装器 - 处理查询执行和插件管理 - 管理HTTP会话和身份验证

  1. 元数据收集器 (metadata.py)

- 元数据操作的高级接口 - 数据库和表发现 - 模式自省 - 表格搜索

  1. MCP服务器 (server.py)

- 基于FastMCP的服务器实现 - 将所有功能作为MCP工具公开 - 基于环境的配置 - 错误处理和响应格式

API 参考

DrillClient

class DrillClient:
    def __init__(
        self,
        host: str = "localhost",
        port: int = 8047,
        username: Optional[str] = None,
        password: Optional[str] = None,
    ) -> None:
        """Initialize Drill client"""

    # Query Methods
    def execute_query(query: str, timeout: Optional[int] = None) -> DrillQueryResult:
        """Execute a SQL query"""

    def get_query_status(query_id: str) -> Dict[str, Any]:
        """Get query status"""

    def cancel_query(query_id: str) -> bool:
        """Cancel a query"""

    # Storage Plugin Methods
    def list_storage_plugins() -> List[Dict[str, Any]]:
        """List all plugins"""

    def get_storage_plugin(name: str) -> Dict[str, Any]:
        """Get plugin config"""

    def create_storage_plugin(name: str, config: Dict[str, Any]) -> Dict[str, Any]:
        """Create/update plugin"""

    def delete_storage_plugin(name: str) -> bool:
        """Delete plugin"""

    def enable_storage_plugin(name: str) -> Dict[str, Any]:
        """Enable plugin"""

    def disable_storage_plugin(name: str) -> Dict[str, Any]:
        """Disable plugin"""

    # Metadata Methods
    def get_databases() -> List[str]:
        """Get list of databases"""

    def get_tables(database: str) -> List[str]:
        """Get tables in database"""

    def get_table_schema(database: str, table: str) -> Dict[str, str]:
        """Get table schema"""

元数据收集器

class MetadataGatherer:
    def get_all_databases() -> List[DatabaseInfo]:
        """Get all databases with tables"""

    def get_database_info(database: str) -> DatabaseInfo:
        """Get database info"""

    def get_table_info(database: str, table: str) -> TableInfo:
        """Get detailed table info"""

    def search_tables(pattern: str) -> List[Dict[str, Any]]:
        """Search for tables"""

    def get_storage_plugin_info() -> List[Dict[str, Any]]:
        """Get plugin information"""

    def get_column_sample_data(
        database: str,
        table: str,
        limit: int = 5
    ) -> List[Dict[str, Any]]:
        """Get sample data from table"""

贡献

贡献.md 了解如何为这个项目做出贡献的指导方针。

许可证

此项目根据Apache许可证2.0获得许可。看 许可证 文件以获取详细信息。

故障排除

连接被拒绝

  • 验证Drill服务器是否正在运行: curl http://localhost:8047/api/v1/storage
  • 检查DRILL_HOST和DRILL_PORT环境变量
  • 确保与Drill服务器的网络连接

身份验证错误

  • 验证DRILL_USENAME和DRILL_PASSWORD是否正确
  • 检查Drill服务器是否启用了身份验证
  • 有关身份验证配置,请参阅Drill文档

查询执行失败

  • 检查查询语法是否有效Drill SQL
  • 验证存储插件是否已启用
  • 检查数据源可访问性

元数据发现问题

  • 确保“显示数据库”和“显示表”查询在Drill UI中正常工作
  • 检查Drill帐户的权限问题
  • 验证存储插件配置

支持

对于问题、疑问或建议:

  1. 检查现有
  2. 创建包含详细信息的新问题
  3. 包括错误消息、查询示例和环境详细信息

路线图

  • \[\]支持Drill的高级安全功能
  • \[\]元数据查询的缓存层
  • \[\]大型数据集的查询结果流
  • \[\]与Drill的作业监控集成
  • \[\]性能优化和基准测试
  • \[\]Docker支持和部署指南
  • \[\]与真实Drill实例的集成测试

目录标签

目录标签

数据分析PythonClaude数据查询本地部署存储管理元数据发现ApacheDrillMCP协议

支持客户端

Claude

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

none

工具数量(toolCount,工具数)

15

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdionone部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP