安全代理工具(MCP、HTTP)
通过流式HTTP管理MCP --不是一个薄薄的聊天机器人包装。此项目连接了a FastMCP 服务器,a 权限感知客户端 (allow / ask / deny +审计),以及a 工具调用LLM主机 (操作员 格拉迪奥 +烧瓶 演示/直播;模型是可插拔的)。
作者 阿里·穆萨维 · 存储库:
建筑(一览)
flowchart LR
subgraph srv["MCP server"]
T["Tools"]
R["Resources"]
P["Prompts"]
end
C["Permission client (Operator / Flask Live)"]
L["LLM host\n(tool-calling)"]
srv |"Streamable HTTP (MCP)"| C
C |"LLM API (tools)"| L- 服务器 --MCP 服务器 角色:工具、资源、提示;工作空间+服务器端审计。
- 中间 --MCP 客户端 (可将HTTP流式传输到服务器)加 应用程序策略:
permissions.json和audit.log以客户为中心生活;Operator/Flask是嵌入此堆栈的UI。 - LLM — 工具调用 超过一个 API有限责任公司 (非MCP运输);具体模型是一种部署选择。该模型提出了工具; 策略在客户端中运行 在呼叫到达MCP服务器之前。
截图
供审阅者使用的代表性UI捕获(如果您更喜欢像素完美的保真度而不是本地运行,请替换为您自己的UI捕获)。
操作员(Gradio)-- python -m mcp_operator.gradio_app | 用户界面(Flask)-- python -m web.app |
|---|---|
| Operator console | Flask user UI |
布局
所有Python包都位于 src/ 只有。(不要添加 mcp_client, mcp_server,或 operator 在repo根目录下,这些是零散的空文件夹,已被删除。)
src/mcp_server--合并了工作区+治理工具、审计日志、资源、提示;服务/mcp通过可流式传输的HTTP。src/mcp_client--可流式传输的HTTP客户端+data/permissions.json策略+客户端审计日志。src/agent--LLM工具调用主机(兼容OpenAI:OpenAI、Groq、Cerebras、自定义OPENAI_BASE_URL;由运营商和Flask Live共享)。src/mcp_operator--Gradio:AI聊天、工具/资源/提示检查、权限编辑器。src/web--Flask用户应用程序: 演示 (离线)或 生活 (LLM+MCP)。data/—permissions.json,workspace/,生成audit.log.
存储库树
secure-agentic-mcp/
├── README.md
├── docs/
│ ├── operator.png
│ └── flask.png
├── requirements.txt
├── docker-compose.yml
├── Dockerfile.server
├── Dockerfile.operator
├── Dockerfile.web
├── .env.example
├── .gitignore
├── pytest.ini
├── data/
│ ├── permissions.json
│ └── workspace/
│ └── README.md
└── src/
├── agent/
│ ├── __init__.py
│ ├── llm_client.py
│ └── mcp_llm_host.py
├── mcp_client/
│ ├── __init__.py
│ └── http_permission_client.py
├── mcp_operator/
│ ├── __init__.py
│ └── gradio_app.py
├── mcp_server/
│ ├── __init__.py
│ ├── __main__.py
│ └── server.py
└── web/
├── __init__.py
├── app.py
├── demo.py
├── branding.py
├── static/
│ ├── architecture.svg
│ ├── script.js
│ └── styles.css
└── templates/
└── index.html
└── tests/
├── test_agent.py
├── test_demo.py
├── test_flask.py
├── test_imports.py
└── test_permission_client.py仅限本地(非git): .env, .venv/, data/audit.log, .pytest_cache/.
快速启动(本地)
cd secure-agentic-mcp
python -m venv .venv
.venv\Scripts\activate # Windows
pip install -r requirements.txt
copy .env.example .env # add LLM credentials (OpenAI, Groq, Cerebras, or custom URL — see comments)终端1-MCP服务器:
set PYTHONPATH=src
set MCP_DATA_DIR=%CD%\data
python -m mcp_server2号航站楼——操作员(Gradio):
set PYTHONPATH=src
set MCP_SERVER_URL=http://127.0.0.1:8000
set MCP_DATA_DIR=%CD%\data
python -m mcp_operator.gradio_app终端3——用户Flask应用程序:
set PYTHONPATH=src
set MCP_SERVER_URL=http://127.0.0.1:8000
set MCP_DATA_DIR=%CD%\data
python -m web.app- MCP:
http://127.0.0.1:8000/mcp - 操作员:
http://127.0.0.1:7860 - 用户界面:
http://127.0.0.1:5000
Windows:编号脚本(步骤相同,每个应用程序一个终端)
从repo根目录: .\scripts\00-print-env.ps1 (仅预览),然后 01-mcp-server.ps1, 02-operator.ps1, 03-web.ps1。参见 scripts\RUN-ORDER.txt 以及每个顶部的评论 .ps1 文件。
码头工人
copy .env.example .env
docker compose up --build地图:MCP 8000,操作员 7860,网络 5000。在中设置LLM凭据 .env (默认值 LLM_PROVIDER=openai + OPENAI_API_KEY,或 groq / cerebras / custom --看 .env.example 和 免费llm api).
环境
看 .env.example重要提示: MCP_SERVER_URL (必须与Docker服务匹配 http://mcp:8000 内部作曲), MCP_DATA_DIR,以及 LLM_PROVIDER 使用匹配的密钥(OPENAI_API_KEY, GROQ_API_KEY, CEREBRAS_API_KEY,或 OPENAI_BASE_URL + OPENAI_API_KEY 定制)。免费等级设置想法: 免费llm api.
故障排除
list_files / read_file 不匹配 data/workspace/ 在磁盘上
仅 一 进程应该监听您在中设置的URL MCP_SERVER_URL (默认值 http://127.0.0.1:8000).如果另一台MCP服务器(例如另一个项目)首先占用了该端口,Gradio/Flask将与 那 服务器的工作区,而不是此仓库的 data/workspace/.
- 停止其他MCP服务器,或设置
MCP_HTTP_PORT/MCP_SERVER_URL因此它们不共享端口(例如。8010和http://127.0.0.1:8010). - 开始
python -m mcp_server,检查控制台:它会打印MCP_DATA_DIR和Workspace绝对路径 这 回购。它们必须与您查找文件的位置相匹配。
背景终端(光标)
使用 View → 终端 (或 ` Ctrl+ `).每个选项卡都是一个shell;长时间运行的服务器在那里运行。在Windows上, netstat -ano | findstr :8000` 显示哪个 比例-积分-微分 拥有一个港口。
测试
自动化测试使用 pytest (pytest.ini 套 pythonpath = src).他们确实如此 不 启动MCP HTTP服务器或调用外部API。
pip install -r requirements.txt
pytest -v| 步骤 | 它检查什么 |
|---|---|
| 进口 | mcp_server, mcp_client, agent, mcp_operator, web 负载 |
demo_reply | 离线演示字符串 |
| 权限客户端 | 加载/保存JSON策略, check_permission,默认值 |
risk_levels_map | 所有预期的工具名称都存在 |
llm_client | 提供商默认值, resolved_llm_model, live_llm_configured |
| 烧瓶 | GET /, POST /generate 演示模式,验证错误 |
对于手动端到端检查,请从以下位置运行三个流程 快速启动(本地) 并在浏览器中练习操作员+实时模式。
