自己部署
一个二进制或一个容器。用自己的知识包,或让生辰不出本机。
公网服务够用时不需要部署。这两种情况值得自己跑一份:想让工具用你自己的知识包;或者不想让生辰离开自己的机器。
源码在 x-haose/x-ziwei,MIT 许可。
本机用(stdio)
需要 Rust 1.88 以上和 Git。
git clone https://github.com/x-haose/x-ziwei
cd x-ziwei
cargo build --release --locked得到 target/release/x-ziwei。在客户端里把它登记为本地 MCP 服务器,生辰只在本机处理:
{
"mcpServers": {
"ziwei": {
"command": "/你的路径/x-ziwei",
"args": ["stdio"]
}
}
}作为服务跑
docker build -t x-ziwei .
docker run --rm -p 8080:8080 x-ziwei或直接运行二进制:x-ziwei serve --listen 127.0.0.1:8080。
- MCP:
http://127.0.0.1:8080/mcp - JSON 接口:
http://127.0.0.1:8080/v1/* - 健康检查:
GET /healthz
| 参数 | 作用 |
|---|---|
--listen | 监听地址,默认 0.0.0.0:8080 |
--allowed-host | MCP 只接受这个 Host,可重复。公网部署要设 |
--public-url | 对外的 HTTPS 根地址。设了才提供 /v1/openapi.json |
--client-ip-header | 服务在反向代理之后时,指明哪个请求头带客户端地址,用作限流键。Cloudflare 之后填 cf-connecting-ip,Traefik 或 nginx 之后填 x-real-ip |
--rate-per-second / --rate-burst | 每个地址的限流,默认每秒 10 次、突发 30 次 |
客户端地址头必须由代理覆盖
只有前面的代理一定会改写这个头时才能设 --client-ip-header,否则客户端可以伪造地址绕过限流。经 Cloudflare 时还要让源站只接受 Cloudflare 的连接。
用自己的知识包
启动时登记允许读取的目录或地址:
x-ziwei stdio --allow-pack-dir ./packs
x-ziwei serve --allow-pack-url https://example.com/my-school.json之后各工具的 pack 参数可以写 file:./packs/my-school.json 或登记过的那个 URL。不在白名单里的路径和地址一律拒绝;远程包上限 1 MiB。
包的写法见知识包。extends 写 iztro-docs 的包会合并到默认包之上。