Metadata-Version: 2.4
Name: apollo-tool-mcp
Version: 0.1.0
Summary: MCP server for Apollo configuration export and diff workflows
Keywords: apollo,config,mcp,model-context-protocol,server
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Libraries
Requires-Python: >=3.11
Requires-Dist: mcp[cli]<2,>=1.17.0
Provides-Extra: dev
Requires-Dist: coverage[toml]<8,>=7.6.0; extra == 'dev'
Description-Content-Type: text/markdown

# Apollo Diff 工具

这是一个命令行工具，用于检查 Apollo 配置中心中指定应用 ID 下的配置项在不同环境和 cluster 中的差异。

## Python MCP Server

仓库中已开始迁移一个 Python 版 MCP server，目录为 `mcp_server/`。当前已覆盖以下能力：

- 列出应用可用的 `env/cluster`
- 对指定 key 做跨环境对比
- 导出指定 `env/cluster` 的全部配置到 `.properties` 文件

推荐使用 `uv` 管理依赖和运行：

```bash
uv sync
uv run python -m mcp_server
```

安装后也可以直接使用发布包暴露的命令：

```bash
apollo-tool-mcp
```

也可以使用 MCP Inspector 调试：

```bash
uv run mcp dev mcp_server/server.py
```

认证信息可通过 tool 参数传入，或通过环境变量提供：

```bash
export APOLLO_ADMIN_URL=http://apollo-admin-service-url:8080
export APOLLO_USERNAME=your-username
export APOLLO_PASSWORD=your-password
```

开发和测试流程：

```bash
# 1. 安装运行时和测试依赖
uv sync --extra dev

# 2. 跑单元测试
uv run python -m unittest discover -s tests -v

# 3. 生成覆盖率报告，要求 >= 80%
uv run coverage run -m unittest discover -s tests
uv run coverage report -m

# 4. 本地启动 MCP server
uv run python -m mcp_server
```

发布流程：

```bash
# 1. 构建分发包
uv build

# 2. 检查产物
ls dist/

# 3. 发布到 PyPI
uv publish
```

如果先发测试仓库：

```bash
uv publish --publish-url https://test.pypi.org/legacy/
```

## 功能

- 动态获取所有环境（env）和 cluster 列表
- 遍历所有环境和 cluster，获取指定 key 的配置值
- 按值分组美化输出，展示每个值对应的环境/cluster 列表
- 支持命令行参数传递 Apollo 管理服务地址、应用 ID、认证 Token（Cookie）
- 支持并发请求，提升对比效率

## 构建

```bash
gradle clean build
```

## 使用方法

```bash
# 使脚本可执行
chmod +x apollodiff

# 运行程序（需传递认证信息）
./apollodiff -admin http://apollo-admin-service-url:8080 -appid your-app-id -u your-username -p your-password
```

### 参数说明

- `-admin` 或 `--admin-service`: Apollo 管理服务地址（必填）
- `-appid` 或 `--app-id`: 应用 ID（必填）
- `-token` 或 `--auth-token`: 认证 Token（必填，作为 Cookie 头传递）

### 运行流程

1. 程序会自动获取所有环境（env）列表。
2. 对每个环境，自动获取所有 cluster 列表（过滤部分特殊 cluster）。
3. 提示用户输入要检查的 key。
4. 遍历所有环境和 cluster，获取该 key 的配置值。
5. 按值分组输出结果，每组展示对应的环境/cluster。

### 输出示例

```bash
$ ./apollodiff -admin http://10.11.2.40:8080 -appid sample-appid -u bob -p bob-secret
enter the key you wanna check
[stdin sample] a.b
fetch env list : [DEV, FAT, UAT, PROD]
环境 DEV 下的clusters: [default, cluster1]
环境 FAT 下的clusters: [default, cluster2]
...
值: sampleValue1
  - DEV/cluster1
  - UAT/default
值: sampleValue2
  - FAT/cluster2
```

如未找到指定 key，会输出：
```
在所有环境和cluster中未找到指定的key: a.b
```

## 依赖环境

- Java 17 或更高版本
- Gradle 8.0（使用包含的Gradle Wrapper即可，无需单独安装）
- 需具备访问 Apollo 管理服务的网络权限

## 注意事项

- 
- 若环境或 cluster 获取失败，请检查服务地址和 Token 是否正确。
- 默认过滤部分特殊 cluster（如 default、test-xh 等）。

## 常见问题

- 若提示参数解析错误，请检查命令行参数是否齐全。
- 若提示无法获取环境/cluster，请确认网络和权限。
