一个基于Model Context Protocol (MCP)的服务器,用于自动化搜索和从Red Hat客户门户提取数据。
requirements.txt)克隆仓库:
git clone https://github.com/deadjoe/woodgate.git
cd woodgate
使用uv创建虚拟环境并安装依赖:
uv venv
source .venv/bin/activate
uv pip install -e ".[dev]"
设置环境变量进行安全认证:
export REDHAT_USERNAME="your_username"
export REDHAT_PASSWORD="your_password"
可选的环境变量配置:
# 浏览器配置
export WOODGATE_HEADLESS="true" # 是否使用无头模式
export WOODGATE_BROWSER_TIMEOUT="20" # 浏览器操作超时时间(秒)
# 搜索配置
export WOODGATE_DEFAULT_ROWS="20" # 默认每页结果数
export WOODGATE_DEFAULT_SORT="relevant" # 默认排序方式
# 服务器配置
export WOODGATE_HOST="127.0.0.1" # 服务器主机地址
export WOODGATE_PORT="8000" # 服务器端口
# 日志配置
export WOODGATE_LOG_LEVEL="INFO" # 日志级别
export PYTHONUNBUFFERED=1 # 禁用Python输出缓冲
export LOGLEVEL=DEBUG # 设置日志级别为DEBUG
export PYTHONTRACEMALLOC=1 # 启用内存分配跟踪
export PYTHONASYNCIODEBUG=1 # 启用asyncio调试
# 重试配置
export WOODGATE_MAX_RETRIES="3" # 最大重试次数
export WOODGATE_RETRY_DELAY="3" # 重试延迟(秒)
最简单的方法是使用提供的启动脚本:
./start_server.sh
这将自动:
手动运行MCP服务器:
uv run python -m woodgate
或者指定主机、端口和日志级别:
uv run python -m woodgate --host 0.0.0.0 --port 8080 --log-level DEBUG
首先,需要启动MCP服务器:
# 设置Red Hat客户门户凭据
export REDHAT_USERNAME="your_username"
export REDHAT_PASSWORD="your_password"
# 启动MCP服务器
uv run python -m woodgate --host 0.0.0.0 --port 8080 --log-level DEBUG
服务器将在端口8080上启动,并使用SSE传输协议。
在Claude Desktop中安装MCP服务器:
这将打开配置文件(通常位于~/Library/Application Support/Claude/claude_desktop_config.json)。将以下内容添加到配置文件中:
{
"globalShortcut": "",
"mcpServers": {
"Red Hat KB Search": {
"command": "uv",
"args": [
"run",
"--with",
"mcp[cli]",
"mcp",
"run",
"/path/to/your/project/server.py:mcp"
],
"env": {
"REDHAT_USERNAME": "your_username",
"REDHAT_PASSWORD": "your_password"
}
}
}
}
请确保将/path/to/your/project/替换为您项目的实际路径。
保存配置文件后,重启Claude Desktop。现在,您应该能够在Claude Desktop中使用Red Hat KB Search工具了。
env部分设置redhat_credentials.txt文件存储凭据,服务器会自动读取该文件在支持MCP的客户端中,可以使用以下工具:
# 基本搜索
search(query="memory leak")
# 带产品过滤的搜索
search(
query="kubernetes pod crash",
products=["Red Hat OpenShift Container Platform"]
)
# 带文档类型过滤的搜索
search(
query="selinux permission denied",
doc_types=["Solution", "Article"]
)
# 完整搜索示例
search(
query="performance tuning",
products=["Red Hat Enterprise Linux"],
doc_types=["Solution", "Article", "Documentation"],
page=1,
rows=50,
sort_by="lastModifiedDate desc"
)
# 获取产品警报
get_alerts(product="Red Hat Enterprise Linux")
# 获取文档内容
get_document(document_url="https://access.redhat.com/solutions/12345")
可用的产品和文档类型可以通过MCP资源获取:
# 获取可用产品列表
available_products = mcp.resources["config://products"]
# 获取可用文档类型
document_types = mcp.resources["config://doc-types"]
REDHAT_USERNAME 和 REDHAT_PASSWORDredhat_credentials.txt(包含两行,第一行是用户名,第二行是密码)claude_desktop_config.json的env部分设置.gitignore中排除)项目使用GitHub Actions进行持续集成,配置文件位于.github/workflows/python-tests.yml。每次推送到main分支或创建Pull Request时,会自动运行测试并生成覆盖率报告。
CI流程包括:
# 安装测试依赖
uv pip install -e ".[dev]"
python -m playwright install
# 运行所有测试
uv run pytest
# 运行特定测试文件
uv run pytest tests/test_auth.py
# 运行测试并生成覆盖率报告
uv run pytest --cov=woodgate --cov-report=term-missing
# 运行Playwright测试
uv run pytest tests/test_with_playwright_fixtures.py
# 运行Playwright测试并指定浏览器
uv run pytest tests/test_with_playwright_fixtures.py --browser firefox
# 运行Playwright测试并启用有头模式
uv run pytest tests/test_with_playwright_fixtures.py --headed
# 运行Playwright测试并启用调试模式
PWDEBUG=1 uv run pytest tests/test_with_playwright_fixtures.py
# 运行Playwright测试并生成跟踪文件
uv run pytest tests/test_with_playwright_fixtures.py
# 查看跟踪文件
playwright show-trace trace.zip
# 使用black格式化代码
uv run black woodgate tests
# 使用isort排序导入
uv run isort woodgate tests
# 使用flake8检查代码质量
uv run flake8 woodgate tests
# 使用ruff进行快速代码检查和修复
uv run ruff check woodgate tests
uv run ruff check --fix woodgate tests
项目的测试覆盖率目标为70%以上。可以使用以下命令查看当前的测试覆盖率:
uv run pytest --cov=woodgate --cov-report=term-missing
woodgate/
├── __init__.py # 包初始化
├── __main__.py # 命令行入口点
├── config.py # 配置管理
├── server.py # MCP服务器定义
└── core/ # 核心功能模块
├── __init__.py # 核心包初始化
├── auth.py # 认证模块
├── browser.py # 浏览器管理
├── search.py # 搜索功能
└── utils.py # 工具函数
tests/ # 测试目录
├── conftest.py # 测试配置和固件
├── test_async_fixed.py # 修复的异步测试
├── test_async_with_playwright.py # 使用Playwright的异步测试
├── test_auth.py # 认证测试
├── test_auth_extended.py# 扩展认证测试
├── test_browser.py # 浏览器测试
├── test_config.py # 配置测试
├── test_main.py # 主模块测试
├── test_mcp_server.py # MCP服务器测试
├── test_playwright_browser.py # Playwright浏览器测试
├── test_search.py # 搜索测试
├── test_search_extended.py # 扩展搜索测试
├── test_server.py # 服务器测试
├── test_utils.py # 工具函数测试
└── test_with_playwright_fixtures.py # 使用Playwright固件的测试
# 根目录关键文件
server.py # 独立MCP服务器实现,包含所有必要功能
mcp_server.py # MCP服务器启动脚本,处理依赖和环境
start_server.sh # 便捷的服务器启动脚本,自动设置环境和启动服务器
独立的MCP服务器实现,包含所有必要的功能,可以直接与Claude Desktop集成。它具有以下特点:
模块化的MCP服务器实现,是标准包结构的一部分。与根目录的server.py相比,它更加模块化,依赖于woodgate包中的其他模块。在通过python -m woodgate运行时使用。
MCP服务器启动脚本,在不同环境下确保服务器能够正确启动:
使用方法:
# 直接运行
python mcp_server.py
# 或者设置环境变量后运行
export REDHAT_USERNAME="your_username"
export REDHAT_PASSWORD="your_password"
python mcp_server.py
便捷的服务器启动脚本,提供一键启动功能:
使用方法:
# 确保脚本有执行权限
chmod +x start_server.sh
# 运行脚本
./start_server.sh
项目使用Git进行版本控制,并配置了.gitignore文件以排除以下内容:
__pycache__/, *.py[cod]).venv/, env/)build/, dist/, *.egg-info/).coverage, coverage.xml)*credentials*.txt, *password*.txt, *secret*.txt).DS_Store)*.bak, *.orig)提交代码前请确保不包含敏感信息和不必要的临时文件。
本项目采用MIT许可证 - 详见LICENSE文件。