phocinae-mcp
斑海豹(Phocinae)审批/推理能力的 MCP stdio server:把 phocinae-guard 的命令审批门(gate)和斑海豹 P0 推理协议(classify / route / score)暴露成 MCP 工具,接入 Cline / Windsurf / Zed / Codex CLI 等仅支持 MCP 的编码代理。
- 纯标准库(Python ≥ 3.8),零第三方依赖;MCP 协议为手写 JSON-RPC 2.0 stdio 实现。
- 复用 phocinae-guard 的
l0_judge/decide(自动探测同级目录);guard 不存在时 gate 自动降级为纯 HTTPnoul+score两问实现。 - fail-closed 语义:服务不可用时 gate 返回 deny + 原因说明,其余工具返回明确错误(MCP
isError:true),绝不静默放行。 - 许可证:Apache-2.0(见 LICENSE)。
工具一览
| 工具 | 参数 | 返回 | fail-closed 行为 |
|---|---|---|---|
gate |
command(必填)、cwd?、server? |
decision ∈ allow|deny|ask、layer(L0/L1/fail_closed)、reason、noul、score |
服务不可用/判定异常 → decision=deny + 原因 |
classify |
state(必填)、labels(必填,≥1 个非空字符串)、server? |
choice(0 起下标)、label、confidence |
服务不可用 → 明确错误(isError) |
route |
state(必填)、tools(必填)、server? |
choice、tool(选中的工具名) |
服务不可用 → 明确错误(isError) |
score |
state(必填)、criteria(必填)、server? |
score ∈ [2, 10]、range |
服务不可用/应答越界 → 明确错误(isError) |
server?为工具级服务地址覆盖,等价于进程级--server;地址解析顺序:工具参数 >--serverCLI >PHOCINAE_MCP_SERVERenv >http://127.0.0.1:8155。gate判定链路:L0 确定性表(白名单/黑名单,本地、离线、毫秒级)→ 灰区时若启用--l1-enabled再调/v1/systemone两问(noul 放行概率 + score 风险 2–10,阈值 0.65 / 7 / 4 合成取最严格);L1 未启用(默认:150M 权重未做命令审批域校准)则灰区直接 fail-closed deny。
服务协议(P0)
POST /v1/systemone
{"model": "Phocinae-Largha-150M-v1", "state": str,
"questions": [{"id", "type": noul|choice|score, "options"?, "threshold"?}]}
→ {"model", "answers": {id: 值}, "usage", "answer_confidence"}
noul=bool、choice=int 下标、score=2–10。应答兼容扁平值与旧 mock 嵌套对象两种形状。
Install
无需安装即可运行(仓库根目录执行);也可本地 pip 安装:
cd phocinae-mcp
python3 -m phocinae_mcp --version # phocinae-mcp 0.1.0
pip install -e . # 可选:提供 phocinae-mcp 命令
运行测试(子进程启动 server、全生命周期 JSON-RPC 帧、失败分支):
python3 tests/test_mcp.py # 22 项
配置
| 项 | CLI | 环境变量 | 默认 |
|---|---|---|---|
| 服务地址 | --server http://host:port |
PHOCINAE_MCP_SERVER(兼容 PHOCINAE_GUARD_SERVER) |
http://127.0.0.1:8155 |
| 请求超时 | --timeout 5.0 |
PHOCINAE_MCP_TIMEOUT |
5.0 |
| guard.py 路径 | --guard /path/to/guard.py |
PHOCINAE_MCP_GUARD_PATH(兼容 PHOCINAE_GUARD_PATH) |
自动探测 ../phocinae-guard/guard.py |
| 启用 L1 模型裁决 | --l1-enabled |
PHOCINAE_MCP_L1_ENABLED=1 |
关(灰区 fail-closed) |
| 模型名 | --model |
PHOCINAE_MCP_MODEL |
Phocinae-Largha-150M-v1 |
客户端接入示例
Cline / Windsurf(mcpServers)
{
"mcpServers": {
"phocinae": {
"command": "python3",
"args": ["-m", "phocinae_mcp", "--server", "http://127.0.0.1:8155"],
"env": { "PHOCINAE_MCP_L1_ENABLED": "0" }
}
}
}
(若已 pip install -e .,command 可写 phocinae-mcp。)
Zed(context_servers)
{
"context_servers": {
"phocinae": {
"command": {
"path": "python3",
"args": ["-m", "phocinae_mcp", "--server", "http://127.0.0.1:8155"]
}
}
}
}
Codex CLI(~/.codex/config.toml)
[mcp_servers.phocinae]
command = ["python3", "-m", "phocinae_mcp", "--server", "http://127.0.0.1:8155"]
完整示例见 mcp_config.example.json。
安全声明
- fail-closed 是硬语义:服务不可用、超时、响应异常、应答字段缺失/越界时,
gate一律返回deny并附原因;classify/route/score返回明确错误。任何情况下都不会在服务异常时静默放行。 - deny 不可覆盖:
gate返回deny后无任何放行通道;ask需人工确认(由宿主代理实现确认流程)。 - L1 默认关闭:斑海豹 150M 权重尚未做命令审批域校准,
gate默认只用本地确定性 L0 表;--l1-enabled是显式选择的实验开关。 - 纯本地部署:本仓库不包含任何发布/推送/上传逻辑,仅本地运行与本地测试;禁止将本服务暴露到公网。
- 集成方应对
gate的deny/ask结果做强制阻断(exit 非零 / 拒绝执行),并建议在宿主侧对判定追加审计日志(guard 侧自带 JSONL 审计)。
License
Apache License 2.0 —— 见 LICENSE。
Metadata
Release files for phocinae-mcp 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| phocinae_mcp-0.1.1.tar.gz | 25.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| phocinae_mcp-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 46.1 kB
Release files / phocinae_mcp-0.1.1.tar.gz
| Download URL | phocinae_mcp-0.1.1.tar.gz |
|---|---|
| Size | 25.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
552216d39ddcc3be1f4e2ac628cc13641fc0c78c8f24e8850af2cb39e819a01f
|
|
BLAKE2b-256 checksum How to use checksums |
7a4cccfde9674dff273b4f7c3c38fa3287f87570c738cc2cc855b0f1e339b78e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / phocinae_mcp-0.1.1-py3-none-any.whl
| Download URL | phocinae_mcp-0.1.1-py3-none-any.whl |
|---|---|
| Size | 21.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1c392ef533dc3f7e3bfdd0675efccf50d3970e36d0ecf476a94b61b9244c568e
|
|
BLAKE2b-256 checksum How to use checksums |
ee91b0e7a268be610def4457e4cfff57899d3cc7528154b4c69c73fa48a23bc8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|