内容
# myanonamouse-mcp
MyAnonamouse 的 MCP(模型上下文协议)服务器,专营有声书和电子书的私人追踪器。为任何兼容 MCP 的客户端(如 Claude Desktop)提供 MyAnonamouse 搜索和用户工具。
## 前提条件
- MyAnonamouse 账户
- `mam_id` 会话 cookie(参见下面的[身份验证](#身份验证))
- Rust 工具链(用于从源代码构建)—— 或者从[发布版本](../../releases)下载预构建的二进制文件
## 从源代码构建
```bash
git clone https://github.com/sandymac/myanonamouse-mcp.git
cd myanonamouse-mcp
cargo build --release
# 二进制文件位于 target/release/myanonamouse-mcp
```
## 身份验证
MyAnonamouse 通过名为 `mam_id` 的会话 cookie 进行身份验证。没有 API 密钥或 OAuth 流——您直接从站点复制该值。
**如何获取您的 `mam_id`:**
1. 在浏览器中登录 MyAnonamouse
2. 进入 **Preferences → Security**
3. 复制 `mam_id` 显示的值
> `mam_id` 值很长,可能包含 `%3D`,可能需要在末尾替换为 `=` 符号。使用 `--test-connection` 进行验证。
通过 `--mam-session` 标志或 `MAM_SESSION` 环境变量提供该值。cookie 会定期过期;如果您遇到身份验证错误,请从 Preferences → Security 刷新它,并使用 `--test-connection` 进行验证。
### 会话持久性(推荐)
MAM 偶尔会在其响应中旋转 `mam_id` cookie。服务器在运行时会自动获取旋转的值,但如果没有持久性,它将在重启时丢失——而您配置的原始值可能不再有效。传递 `--state-file`(或设置 `MAM_STATE_FILE`)以在重启之间保留旋转的 cookie:
```bash
myanonamouse-mcp --mam-session <your_mam_id> --state-file ~/.config/myanonamouse-mcp/state.json
```
启动时,存储的(旋转的)cookie 将用于替代 `--mam-session`/`MAM_SESSION`。如果您提供新的 cookie 值,它将优先并替换存储的值——因此刷新一个已死亡的 cookie 完全像以前一样,不需要删除状态文件。该文件还存储 OAuth 客户端注册和令牌,当启用嵌入式 OAuth 服务器时。请将其保存在仅限用户访问的目录中:它包含您的会话 cookie。
## 快速开始
验证您的会话 cookie 是否有效:
```bash
myanonamouse-mcp --mam-session <your_mam_id> --test-connection
```
运行服务器:
```bash
myanonamouse-mcp --mam-session <your_mam_id>
```
或者设置环境变量以避免在每次调用时传递 cookie:
```bash
export MAM_SESSION=<your_mam_id>
myanonamouse-mcp
```
## Claude Desktop 设置
将服务器添加到您的 Claude Desktop 配置文件中。
**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"myanonamouse": {
"command": "/path/to/myanonamouse-mcp",
"args": ["--mam-session", "your_mam_id_here"]
}
}
}
```
使用环境变量代替(推荐——将 cookie 保存在进程列表之外):
```json
{
"mcpServers": {
"myanonamouse": {
"command": "/path/to/myanonamouse-mcp",
"env": {
"MAM_SESSION": "your_mam_id_here"
}
}
}
}
```
编辑配置后重启 Claude Desktop。
## 可用工具
运行 `myanonamouse-mcp --list-tools` 以查看所有工具及其当前默认状态。
| 工具 | 默认 | 描述 |
|---|---|---|
| `search_audiobooks` | ✓ | 按标题/作者/旁白/系列、类型、语言搜索有声书 |
| `search_ebooks` | ✓ | 按标题/作者/系列、类型、语言搜索电子书 |
| `search_music` | ✓ | 按类型搜索音乐学内容(乐谱、标签、教学) |
| `search_radio` | ✓ | 按类型搜索无线电录音 |
| `get_torrent_details` | ✓ | 获取一个 torrent 的完整详细信息,ID 或哈希 |
| `get_ip_info` | — | 检查 MAM 看到的当前 IP 和 ASN |
| `search_torrents` | — | 跨类别使用数字类别/语言 ID 进行强力搜索 |
| `list_categories` | — | `search_torrents` 的完整类别和子类别 ID 表 |
| `get_user_data` | — | 用户资料——统计数据、比例、种子奖励、通知 |
| `get_user_bonus_history` | — | 奖励积分交易历史 |
| `update_seedbox_ip` | — | 注册当前 IP 作为动态种子盒 IP |
### 工具组
工具被组织成组,以保持默认令牌占用量小。根据需要启用即可。
| 组 | 标志 | 工具 | 何时使用 |
|---|---|---|---|
| 默认 | _(默认启用)_ | `search_audiobooks`, `search_ebooks`, `search_music`, `search_radio`, `get_torrent_details` | 始终可用——只读浏览和搜索 |
| 增强 | `--enable-power-tools` | `search_torrents`, `list_categories` | 跨类别搜索使用原始数字 ID;当类别工具不够灵活时很有用 |
| 用户 | `--enable-user-tools` | `get_user_data`, `get_user_bonus_history` | 访问您的帐户统计数据、比例和奖励积分历史 |
| 种子盒 | `--enable-seedbox` | `update_seedbox_ip`, `get_ip_info` | 在 MAM 上注册您的当前 IP 作为动态种子盒 IP;检查 MAM 看到的 IP/AS |
```bash
# 启用跨类别增强搜索工具
myanonamouse-mcp --mam-session <id> --enable-power-tools
# 启用用户资料工具
myanonamouse-mcp --mam-session <id> --enable-user-tools
# 启用种子盒 IP 注册工具
myanonamouse-mcp --mam-session <id> --enable-seedbox
# 按名称启用特定工具
myanonamouse-mcp --mam-session <id> --enable-tool=get_user_data
# 禁用默认工具(例如,限制为仅电子书)
myanonamouse-mcp --mam-session <id> --disable-tool=search_audiobooks --disable-tool=search_music --disable-tool=search_radio
```
`--disable-tool` 始终优先于组和单个启用标志,无论命令行中标志的顺序如何。
## HTTP 传输
对于远程或代理客户端,请使用 `--transport http` 启动 HTTP/SSE 传输:
```bash
myanonamouse-mcp --mam-session "mam_id" --transport http --http-bind 127.0.0.1:8080 --api-token "your-secret-token"
```
MCP 客户端连接到 `http://<host>:8080/mcp`。当绑定到网络接口时,强烈建议使用 `--api-token` 标志——如果没有它,任何可以访问该端口的人都可以访问 MCP 端点。
客户端在设置 `--api-token` 时必须在每个请求中包含令牌:
```
Authorization: Bearer your-secret-token
```
> 对于面向互联网的部署,请将其放在反向代理(nginx、Caddy、Traefik)后面,该代理终止 TLS。服务器本身不处理 HTTPS。
## 实现最佳结果的提示
- 使用 `search_type: "active"` 来排除死亡 torrent(无种子)
- 使用 `search_type: "fl"` 来查找免费种子 torrent——这些不计入您的下载比例(但您仍必须根据站点要求进行种子)
- 使用 `sort: "most seeders"` 来显示最佳种子结果
- 使用 `sort: "newest"` 来查找最近添加的内容
- 在搜索后使用 `get_torrent_details` 来获取特定 torrent 的完整描述、ISBN、媒体信息和所有元数据
- 使用 `offset` 和 `limit` 来分页浏览大型结果集