rushikeshmore/tor-mcp

GitHub: rushikeshmore/tor-mcp

一个 MCP 协议服务器,让 AI 编程助手的网页请求经由 Tor 匿名路由,避免源 IP 泄露。

Stars: 0 | Forks: 0

# tor-mcp [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/) [![Tests](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/0521ff802b225401.svg)](https://github.com/rushikeshmore/tor-mcp/actions/workflows/tests.yml) 一个适用于 Claude Code、Claude Desktop、Cursor、Windsurf 以及任何其他支持 MCP 协议的客户端的 MCP 服务器。即插即用,将匿名网页获取作为工具提供。 ## 为什么需要这个项目 当 LLM 代理使用诸如 `fetch` 或 `web_search` 之类的工具时,请求会直接从您的机器发出。这会暴露您的 IP、ISP、地理位置和您的指纹。对于 OSINT 查询、数据泄露检查、威胁情报 API,或者仅仅是为了“不希望互联网的这一角知道是谁在发起请求”,这本身就是一种信息泄露。 tor-mcp 作为一个 MCP 服务器插入,使得代理的网络请求通过您本地的 Tor SOCKS5 代理进行,并使用防 DNS 泄露的路由(`socks5h://`,无 DNS 泄露)。它并不是为了匿名化您的浏览器——而是为了匿名化 AI 工具代表您发出的网络流量。 ## 您将获得什么 四个 MCP 工具,均提供 JSON 和 Markdown 两种输出格式: | 工具 | 作用 | |---|---| | `tor_private_fetch` | 获取 URL。根据 URL 模式匹配通过 Tor 或直连进行路由,或者使用 `force_tor` / `force_direct` 强制指定其中一种(两者互斥)。 | | `tor_check_anonymity` | 验证 Tor 是否处于活动状态。通过多提供商回退链将 Tor 出口 IP 与您的真实 IP 进行比较。 | | `tor_new_identity` | 轮换 Tor 链路。通过 Tor 控制端口获取新的出口 IP。受 Tor 自身限制,速率限制为每 10 秒一次。 | | `tor_privacy_status` | 全面健康检查:连接、出口 IP、控制端口、路由规则、配置。 | ### 输出示例 `tor_private_fetch(url="https://api.ipify.org?format=json")` → ``` { "status_code": 200, "url": "https://api.ipify.org?format=json", "content_type": "application/json", "content": "{\"ip\":\"185.220.101.20\"}", "routed_through": "tor", "routing": {"route": "tor", "reason": "default route: tor"} } ``` `tor_check_anonymity(response_format="markdown")` → ``` ## 匿名性检查 - **Status**: Anonymous - **Tor Exit IP**: 185.220.101.20 - **Direct IP**: 106.213.80.181 - **Tor Verified**: Yes ``` ## 快速开始 ### 1. 安装 Tor ``` # macOS brew install tor && brew services start tor # Ubuntu/Debian sudo apt install tor && sudo systemctl start tor # 验证 curl --socks5-hostname 127.0.0.1:9050 https://check.torproject.org/api/ip ``` ### 2. 克隆并添加到您的 MCP 客户端 ``` git clone https://github.com/rushikeshmore/tor-mcp.git cd tor-mcp uv sync ```
Claude Code ``` claude mcp add tor-mcp -- uv --directory $(pwd) run tor-mcp ```
Claude Desktop 在 `claude_desktop_config.json` 中: ``` { "mcpServers": { "tor-mcp": { "command": "uv", "args": ["--directory", "/absolute/path/to/tor-mcp", "run", "tor-mcp"] } } } ```
Cursor / Windsurf / 通用 MCP 客户端 ``` { "mcpServers": { "tor-mcp": { "command": "uv", "args": ["--directory", "/absolute/path/to/tor-mcp", "run", "tor-mcp"], "env": { "TOR_SOCKS_PORT": "9050", "TOR_DEFAULT_ROUTE": "tor" } } } } ```
如果已安装到您的环境中,您也可以使用 `python -m tor_mcp` 启动服务器。 ### 3. 可选:启用链路轮换 要使用 `tor_new_identity`,请编辑您的 `torrc`(macOS 上为 `/usr/local/etc/tor/torrc`,Linux 上为 `/etc/tor/torrc`): ``` ControlPort 9051 CookieAuthentication 1 ``` 之后重启 Tor。 ## 路由 URL → 路由按以下顺序决定: | 优先级 | 规则 | 路由目标 | |---|---|---| | 1 | `.onion` 域名 | Tor(始终) | | 2 | `localhost`、`127.0.0.1`、`*.local` | 直连(始终) | | 3 | 用户 `TOR_PATTERNS` | Tor | | 4 | 用户 `DIRECT_PATTERNS` | 直连 | | 5 | 默认 OSINT/安全域名 (Shodan, HIBP, Censys, urlscan, VirusTotal, OTX, crt.sh) | Tor | | 6 | 默认屏蔽 Tor 的域名 (GitHub, OpenAI, Anthropic, Google) | 直连 | | 7 | 所有其他情况 | `TOR_DEFAULT_ROUTE`(默认:`tor`) | 没有协议的 URL 输入会自动添加协议——远程主机添加 `https://`,`localhost` / `127.0.0.1` / `*.local` 添加 `http://`,以避免对普通开发服务器发起 TLS 请求导致失败。 ## 配置 全部通过环境变量进行: | 变量 | 默认值 | 描述 | |---|---|---| | `TOR_SOCKS_PORT` | `9050` | Tor SOCKS5 代理端口 | | `TOR_CONTROL_PORT` | `9051` | Tor 控制端口(用于链路轮换) | | `TOR_CONTROL_PASSWORD` | | 控制端口密码(如果在 torrc 中设置) | | `TOR_DEFAULT_ROUTE` | `tor` | 回退路由:`tor` 或 `direct` | | `TOR_TIMEOUT` | `30` | HTTP 请求超时(秒) | | `TOR_PATTERNS` | | 逗号分隔的通过 Tor 路由的主机名(支持 `*.example.com`) | | `DIRECT_PATTERNS` | | 逗号分隔的直连路由主机名 | ## 威胁模型 tor-mcp **确实能**防御的威胁: - LLM 工具发出出站 HTTP(S) 请求时的源 IP 暴露。流量从 Tor 中继节点发出,而不是您的家庭 IP。 - DNS 泄露。SOCKS5h 强制在出口节点进行远程 DNS 解析;您的解析器永远不会看到目标主机名。 - 简单的地理限制和基于单一来源的 IP 速率限制(使用 `tor_new_identity` 进行轮换)。 它**无法**防御的威胁: - TLS / JA3 / HTTP 标头指纹识别。流量虽然通过 Tor,但仍然可以被识别为 Python `httpx`。如果目标进行指纹比对,他们可以看出来。 - 全球性对手的流量关联攻击。标准的 Tor 警告。 - 账户级别的去匿名化。如果您登录了,无论通过什么路由,目标都知道您是谁。 - 浏览器指纹识别。不适用——这里没有浏览器,只有一个 HTTP 客户端。 - 操作系统 / 进程 / 剪贴板 / 文件系统元数据。tor-mcp 仅处理 HTTP 流量。 - 恶意或实施监控的出口节点。请仅使用 HTTPS 目标,将出口节点提供的内容视为不受信任的。 无身份验证的 Tor 控制端口假定机器为单用户使用。在共享或多用户主机上,请设置 `TOR_CONTROL_PASSWORD` 并在 `torrc` 中设置哈希密码。 这是一个隐私工具,而不是逃避工具。请勿将其用于欺诈、滥用或任何您无法理直气壮解释的行为。Tor 出口节点运营商经常因为某些人这样做而遭受大量指责,作恶者会损害所有人使用的网络。 ## 工具(参数) ### `tor_private_fetch` - `url`(字符串,必填):目标 URL。 - `method`(字符串,可选):`GET`、`POST`、`HEAD`、`PUT`、`DELETE`、`PATCH`、`OPTIONS`。默认为 `GET`。 - `force_tor`(布尔值,可选):无视路由规则,强制使用 Tor。 - `force_direct`(布尔值,可选):无视路由规则,强制直连。 同时设置 `force_tor=true` 和 `force_direct=true` 将被视为无效输入而被拒绝。 - `response_format`(字符串,可选):`json` 或 `markdown`。默认为 `json`。 ### `tor_check_anonymity` - `response_format`(字符串,可选):`json` 或 `markdown`。默认为 `json`。 通过多提供商链(ipify → httpbin → ifconfig.co)将 Tor 出口 IP 与直连 IP 进行比较,这样单一提供商宕机不会破坏比较。 ### `tor_new_identity` - `verify`(布尔值,可选):检查 IP 是否实际发生更改。默认为 `true`。 - `response_format`(字符串,可选):`json` 或 `markdown`。默认为 `json`。 ### `tor_privacy_status` - `response_format`(字符串,可选):`json` 或 `markdown`。默认为 `json`。 ## 开发 ``` git clone https://github.com/rushikeshmore/tor-mcp.git cd tor-mcp uv sync --dev uv run python -m pytest # run tests (no Tor needed, all mocked) uv run python -m ruff check src/ tests/ uv run tor-mcp # start MCP server on stdio ``` 测试是完全模拟的——开发时不需要运行 Tor。针对(运行中的 Tor 守护进程的)实时验证已记录在 `CLAUDE.md` 中。 ## 许可证 [MIT](LICENSE)。
标签:AI智能体安全, Claude, Cursor, CVE检测, DNS防泄漏, ESC4, IP隐藏, LLM工具, MCP, OSINT, Python, SOCKS5代理, Tor, 代理路由, 匿名网络, 反追踪, 威胁情报, 开发者工具, 开源安全工具, 无后门, 模型上下文协议, 网络安全, 网络安全, 网络请求匿名化, 运行时操纵, 逆向工具, 逆向工程平台, 隐私保护, 隐私保护