MCP 动力工具
一组模型上下文协议(MCP)服务器,使大型语言模型能够与数据库、文件系统和系统服务进行交互。
概述
MCP工具包提供了可直接投入生产的MCP服务器,使大型语言模型(LLMs)能够执行包括数据库管理、文件操作和系统管理在内的实际操作。每台服务器的设计都充分考虑了安全性、安全性和易用性。
特点/功能
- 多数据库支持同时连接到多个 PostgreSQL 实例(针对 Windows 机器的脚本将很快添加)
- 综合数据库操作轻松进行复杂查询
- 文件系统管理在路径限制下完成文件操作
- Bash 脚本自动化创建并执行 bash 脚本
- Django Web 框架操作进行数据库迁移、收集静态文件、启动/停止服务器、更新配置文件、列出应用程序等。
- 将你的图片编码为WebP格式如果你同时使用Django网络框架,这将特别有用。轻松地将你的jpg、png、tiff、bmp、ppm、pgm、pnm图片转换为Webp格式。
- 安全特性对于破坏性操作的确认提示
- 工具前缀化独特的工具名称可避免在不同机器上运行的多个 PostgreSQL 服务器之间产生混淆。
pi_对于树莓派(Raspberry Pi),desktop_适用于Windows桌面安装
可用服务器
我主要致力于设计低级MCP(Minecraft协议)服务器,这些服务器在格式上更贴近软件实际看到的内容,但未来你也可能会通过FastMCP看到一些高级MCP服务器。
PostgreSQL 服务器
功能全面的PostgreSQL数据库管理,支持:
- 支持多台服务器,一台用于Linux系统(已在树莓派上测试),另一台用于您的桌面系统(已在Windows上测试)。无论您如何指示您的模型
不同的机器上有各自的PostgreSQL服务器,但它一直为错误的服务器使用错误的工具。这就是为什么您有两台MCP服务器分别对应您(的两个需求/系统)的原因 对于所需的服务器,我为一个设置了前缀“pi\_”,为另一个设置了前缀“desktop\_”。你可以根据你的.env文件,按任意方式设置这两个服务器。
- 数据库创建/删除
- 创建包含列、约束和外键的表
- 列管理(添加/删除列)
- 索引创建与管理
- 查询执行与优化
- 统计与分析
- 多数据库连接
文件系统服务器
完成针对树莓派或Linux系统的完整文件系统操作:
- 读取、写入、追加和删除文件
- 目录操作(创建、列出、删除)
- 按模式搜索文件
- 复制和移动操作
- Bash脚本的创建与执行
- 系统信息监控
- 网络信息
- 能够在系统上查看、追踪和终止程序
Docker 服务器
容器和镜像管理功能:
- 容器生命周期管理
- 图像操作
- 卷和网络管理
- 集装箱日志和统计数据
- 文件操作组合(或“编写文件操作代码”)
Django 服务器
为您的网站使用的主要Django网络框架命令。
- 启动/停止 Django 开发服务器(分离模式,运行在后台)
- 收集所有静态文件(选项:清理旧文件和跳过提示)
- 阅读并修改您设置中的任何配置。
- 创建、应用并查看您的迁移状态。
- 创建管理员用户,显示已安装的应用程序,清除Django缓存等。
Cwebp 服务器
将各种图像格式转换为Webp格式。
- 在您的.env文件中指定图像输入和输出目录后,cwebp服务器会将您的图像转换为webp格式。
- 默认情况下,它会使用'find'函数在给定目录中搜索jpg和png格式的图片,并将每张图片分别转换为webp格式,同时保留它们的原始名称。
安装
先决条件
- Python 3.8 或更高版本(已在 3.12.11 上测试)
- PostgreSQL(用于数据库服务器)
- Docker(用于Docker服务器)
- SSH访问(用于远程服务器)
- Django 包(用于 Django 服务器)
- cwebp 应用程序(用于 cwebp 服务器)
安装依赖项
pip install mcp psycopg2-binary服务器设置
- 克隆仓库:
git clone https://github.com/Zodijackyl98/mcp-toolkit.git
cd mcp-toolkit- 通过在相同文件夹中创建 .env 文件并相应更新它,或者编辑每个服务器文件中的连接参数来配置您的服务器:
.env 示例
# PostgreSQL Pi Configuration
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_USER=user
POSTGRES_PASSWORD=user_password
POSTGRES_DEFAULT_DB=default_database_name
# PosgreSQL Desktop Configuration
POSTGRES_D_HOST=localhost
POSTGRES_D_PORT=5432
POSTGRES_D_USER=user
POSTGRES_D_PASSWORD=user_password
POSTGRES_D_DEFAULT_DB=default_database_name
# Django
DJANGO_MAIN=/home/user/path/to/your/Django_project_folder
DJANGO_PYTHON=/home/user/miniforge3/envs/your_django_environment/bin/python3
#CWEBP
DEFAULT_IMG_DIR=/home/user/Pictures/inputs/
DEFAULT_OUTPUT_DIR=/home/user/Pictures/outputs/
对于 PostgreSQL 服务器(不使用 .env 文件):
BASE_CONFIG = {
"host": "localhost",
"port": 5432,
"user": "your_username",
"password": "your_password"
}对于文件系统服务器,别忘了将your_usarname替换为你的实际用户名:
HOME_DIR = Path("/home/your_username")- 测试服务器:
python servers/postgresql/postgres_server.py配置
远程服务器的SSH设置
对于如LM Studio等应用所需的远程服务器访问,请在您本地运行模型的机器上设置SSH密钥认证:
# Generate SSH key
ssh-keygen -t ed25519
# Copy to remote server
ssh-copy-id -p PORT user@host
# Test connection
ssh -p PORT user@hostMCP客户端配置
LM Studio 或类似 MCP 客户端的示例配置,我使用的是 miniforge 环境,请将您的 Python 可执行文件路径替换为自己的路径。:
{
"mcpServers": {
"postgresql-pi": {
"command": "ssh",
"args": [
"-p", "1234",
"user@raspberrpi_ip",
"/home/user/miniforge3/envs/your_mcp_environment/python3",
"/path/to/postgres_server.py"
]
},
"filesystem": {
"command": "ssh",
"args": [
"-p", "1234",
"user@raspberrpi_ip",
"/home/user/miniforge3/envs/your_mcp_environment/python3",
"/path/to/pi_server.py"
]
},
"Local Server": {
"type": "stdio",
"command": "/home/user/miniforge3/envs/your_mcp_environment/bin/python3",
"args": ["/path/to/your/server/mcp_server.py"]
}
}使用示例
创建一个数据库
Create a new database called 'myapp' on the Raspberry Pi PostgreSQL server大型语言模型(LLM)将使用 pi_create_database 带有适当参数的工具。
创建一个包含外键的表
Create a table called 'orders' with columns:
- id (serial primary key)
- user_id (integer, foreign key to users.id)
- total (decimal)
- created_at (timestamp, default now)大型语言模型(LLM)将使用 pi_create_table 带有列定义和外键约束的工具。
文件操作
Create a Python script at /home/user/scripts/backup.py that backs up
the database to /home/user/backups/大型语言模型(LLM)将使用文件创建和Bash脚本工具来完成这一任务。
安全考量
数据库服务器
- 只读模式设置
READ_ONLY = True防止写入操作 - 允许的架构(或模式)限制可访问的架构
ALLOWED_SCHEMAS - 行限制默认情况下,每个查询的最大行数设置为1000
- 需要确认破坏性操作需要明确确认
文件系统服务器
- 路径限制所有操作均限制在指定的基础目录内进行
- 安全指令只有被列入白名单的命令才能执行
- 无Root访问权限服务器应以有限用户权限运行
通用的;一般的
- SSH密钥认证使用SSH密钥而非密码
- 网络隔离在可能的情况下,在隔离网络上运行服务器
- 审计日志记录监控服务器日志中的可疑活动
- 定期更新保持依赖项更新
工具命名规范
为避免在运行多个数据库服务器时产生混淆,每个服务器都使用唯一的工具前缀:
- 树莓派 PostgreSQL:
pi_前缀(例如。,pi_list_databases) - 桌面版 PostgreSQL:
desktop_前缀(例如。,desktop_list_databases) - 文件系统:标准名称(例如。,
read_file,write_file)
这确保了大型语言模型(LLM)在每次操作时都使用正确的服务器。
建筑学
服务器通信
MCP服务器通过标准输入/输出(stdio)进行通信,这使得它们易于与任何兼容MCP的客户端集成。对于远程服务器,SSH提供传输层支持。
[LLM Client] [MCP Client] [SSH] [MCP Server] [Database/System]工具执行流程
- 大型语言模型(LLM)根据用户请求和用户需要提供的上下文来决定使用哪个工具
- MCP客户端发送带有参数的工具调用
- 服务器验证参数并检查权限
- 服务器在目标系统上执行操作
- 服务器返回格式化后的结果
- 大型语言模型向用户展示结果
发展
添加新工具
在服务器上添加一个新工具:
- 在(此处)定义工具
list_tools():
Tool(
name="server_prefix_tool_name",
description="Clear description of what the tool does",
inputSchema={
"type": "object",
"properties": {
"param_name": {
"type": "string",
"description": "Parameter description"
}
},
"required": ["param_name"]
}
)- 在(某个环境/系统中)实施该工具
call_tool():
elif tool_name == "tool_name":
# Implementation
result = perform_operation(arguments)
return [TextContent(type="text", text=result)]故障排除
连接问题
问题服务器无响应
- 检查服务器进程是否正在运行
- 验证SSH连接:
ssh -p PORT user@host - 检查防火墙规则
问题认证失败
- 验证SSH密钥是否已正确安装
- 检查远程服务器上的用户权限
- 确认配置中的连接参数
数据库问题
问题权限被拒绝
- 验证数据库用户是否具有必要的权限
- 检查
ALLOWED_SCHEMAS配置 - 确认数据库存在且可访问
问题查询超时
- 使用 LIMIT 减少结果集大小
- 利用索引优化查询
- 检查
MAX_ROWS设定;环境
工具问题
问题大型语言模型(LLM)使用了错误的服务器
- 验证工具前缀是否唯一
- 检查MCP客户端配置
- 重启LLM客户端以重新加载工具
致谢
- 基于Anthropic的模型上下文协议构建
- 受安全、实用的大语言模型(LLM)系统集成需求的启发
- 我极力推荐使用 渗透人工智能(或“渗透式AI”,具体翻译取决于上下文和应用场景) 这是一款针对MCPs(可能是指某种特定任务或领域,如“机器学习任务”或“特定应用场景”,但具体含义需根据上下文确定)优化的、非常轻量但功能强大的LLM(大型语言模型)。我也试用了IBM的新模型 IBM/Granite-4-H-Tiny它不是一个具备推理能力的模型,但如果你的指令非常直接明确,它就能迅速完成任务。我不建议你使用IBM的模型来查询SQL数据库,你需要非常具体地说明,否则它根本无法理解。
支持
对于问题、疑问或建议:
- 请通过联系表单(https://solartrace.site)与我联系。在主题栏中填写“mcp-powertools”。
- 在GitHub上提交一个问题(或:创建一个GitHub问题)
- 检查现有文档
