Local MCP Server
在Termux中运行本地MCP服务器,支持Ollama模型的文件读取与命令执行。
下载 11
支持连接并探索多种数据库,执行查询、查看结构、导出数据。
openclaw skills install @lrg913427-dot/hermes-db-explorer命令、参数、文件名以原文为准
连接数据库、执行查询、探索数据结构并导出数据 —— 全部通过终端完成。
在用户提出以下需求时激活此技能:
| 数据库 | 命令行工具 | macOS 安装方式 | Linux 安装方式 |
|---|---|---|---|
| PostgreSQL | psql | brew install postgresql | apt install postgresql-client |
| MySQL | mysql | brew install mysql | apt install mysql-client |
| SQLite | sqlite3 | (macOS 自带) | apt install sqlite3 |
| MongoDB | mongosh | brew install mongosh | 参见 mongodb.com/docs/shell |
| Redis | redis-cli | brew install redis | apt install redis-tools |
向用户询问:
# PostgreSQL
psql "postgresql://user:password@host:5432/dbname" -c "\dt" # 列出所有表
psql "postgresql://user:password@host:5432/dbname" -c "\d table_name" # 查看表结构
psql "postgresql://user:password@host:5432/dbname" -c "SELECT count(*) FROM table_name;"
# MySQL
mysql -h host -u user -p dbname -e "SHOW TABLES;"
mysql -h host -u user -p dbname -e "DESCRIBE table_name;"
mysql -h host -u user -p dbname -e "SELECT count(*) FROM table_name;"
# SQLite
sqlite3 /path/to/db.db ".tables" # 列出所有表
sqlite3 /path/to/db.db ".schema table_name" # 查看表结构
sqlite3 /path/to/db.db "SELECT count(*) FROM table_name;"
# MongoDB
mongosh "mongodb://user:password@host:27017/dbname" --eval "db.getCollectionNames()"
mongosh "mongodb://user:password@host:27017/dbname" --eval "db.collection_name.countDocuments()"
# Redis
redis-cli -h host -p 6379 -a password INFO keyspace
redis-cli -h host -p 6379 -a password DBSIZE
redis-cli -h host -p 6379 -a password KEYS "*"必须遵守以下规则:
LIMIT 100(或等效限制),除非用户要求全部数据当用户说“探索数据库”或“显示模式”时:
# 步骤 1:列出所有表
# 步骤 2:对每张表,显示字段名、数据类型和约束信息
# 步骤 3:显示每张表的行数
# 步骤 4:显示外键关系
# 步骤 5:汇总成可读的结构图PostgreSQL 完整模式导出:
psql "$CONN" -c "
SELECT table_name, column_name, data_type, is_nullable, column_default
FROM information_schema.columns
WHERE table_schema = 'public'
ORDER BY table_name, ordinal_position;
"MySQL 完整模式导出:
mysql "$CONN" -e "
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
ORDER BY TABLE_NAME, ORDINAL_POSITION;
"将查询结果导出为常用格式:
# CSV(PostgreSQL)
psql "$CONN" -c "\copy (SELECT * FROM table_name) TO '/tmp/export.csv' WITH CSV HEADER"
# CSV(MySQL)
mysql "$CONN" -e "SELECT * FROM table_name" | sed 's/\t/,/g' > /tmp/export.csv
# JSON(PostgreSQL)
psql "$CONN" -t -c "SELECT json_agg(t) FROM (SELECT * FROM table_name LIMIT 100) t;" > /tmp/export.json
# SQLite 导出为 CSV
sqlite3 /path/to/db.db ".mode csv" ".headers on" ".output /tmp/export.csv" "SELECT * FROM table_name;" ".quit"-- PostgreSQL:表大小
SELECT schemaname, tablename, pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename))
FROM pg_tables WHERE schemaname = 'public' ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;
-- PostgreSQL:活跃连接
SELECT pid, usename, application_name, client_addr, state, query_start, query
FROM pg_stat_activity WHERE state != 'idle';
-- PostgreSQL:慢查询(超过 1 秒)
SELECT pid, now() - pg_stat_activity.query_start AS duration, query
FROM pg_stat_activity WHERE state = 'active' AND now() - pg_stat_activity.query_start > interval '1 second';
-- MySQL:表大小
SELECT table_name, ROUND(data_length/1024/1024, 2) AS data_mb, table_rows
FROM information_schema.tables WHERE table_schema = DATABASE() ORDER BY data_length DESC;
-- MySQL:进程列表
SHOW FULL PROCESSLIST;# 慢查询(执行时间超过 1 秒)
psql "$CONN" -c "
SELECT pid, now() - query_start AS duration, query
FROM pg_stat_activity
WHERE state = 'active' AND now() - query_start > interval '1 second'
ORDER BY duration DESC;
"
# 索引使用情况
psql "$CONN" -c "
SELECT schemaname, tablename, indexname, idx_scan, idx_tup_read
FROM pg_stat_user_indexes
ORDER BY idx_scan ASC LIMIT 20;
"
# 表膨胀检测
psql "$CONN" -c "
SELECT schemaname, tablename,
pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) AS total_size,
pg_size_pretty(pg_relation_size(schemaname||'.'||tablename)) AS table_size,
pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename) - pg_relation_size(schemaname||'.'||tablename)) AS index_size
FROM pg_tables
WHERE schemaname = 'public'
ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC LIMIT 10;
"
# 缓存命中率(应高于 99%)
psql "$CONN" -c "
SELECT
sum(heap_blks_hit) / (sum(heap_blks_hit) + sum(heap_blks_read)) AS cache_hit_ratio
FROM pg_statio_user_tables;
"# 慢查询
mysql "$CONN" -e "SELECT * FROM information_schema.processlist WHERE TIME > 1 ORDER BY TIME DESC;"
# 索引使用情况
mysql "$CONN" -e "
SELECT table_name, index_name, cardinality
FROM information_schema.statistics
WHERE table_schema = DATABASE()
ORDER BY cardinality DESC LIMIT 20;
"
# 表大小统计
mysql "$CONN" -e "
SELECT table_name,
ROUND(data_length/1024/1024, 2) AS data_mb,
ROUND(index_length/1024/1024, 2) AS index_mb,
table_rows
FROM information_schema.tables
WHERE table_schema = DATABASE()
ORDER BY data_length DESC LIMIT 10;
"# 备份单个数据库
pg_dump "$CONN" > backup_$(date +%Y%m%d).sql
# 备份单个表
pg_dump "$CONN" -t table_name > table_backup.sql
# 恢复数据
psql "$CONN" < backup.sql
# 带压缩的备份
pg_dump "$CONN" | gzip > backup_$(date +%Y%m%d).sql.gz# 备份单个数据库
mysqldump -h host -u user -p dbname > backup_$(date +%Y%m%d).sql
# 备份单个表
mysqldump -h host -u user -p dbname table_name > table_backup.sql
# 恢复数据
mysql -h host -u user -p dbname < backup.sql# 备份数据库
sqlite3 /path/to/db.db ".backup /tmp/backup.db"
# 或直接复制文件
cp /path/to/db.db /tmp/backup_$(date +%Y%m%d).db# PostgreSQL 导出为 CSV,再导入 MySQL
psql "$PG_CONN" -c "\copy table_name TO '/tmp/export.csv' WITH CSV HEADER"
mysql "$MYSQL_CONN" -e "LOAD DATA LOCAL INFILE '/tmp/export.csv' INTO TABLE table_name FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 ROWS;"# 获取 PostgreSQL 模式的哈希值用于对比
psql "$CONN" -c "
SELECT md5(string_agg(table_name || column_name || data_type, '' ORDER BY table_name, ordinal_position))
FROM information_schema.columns
WHERE table_schema = 'public';
"?sslmode=require 或 --ssl-mode=REQUIREDPRAGMA journal_mode=WAL;admin 数据库上,而非目标数据库:?authSource=adminredis-cli INFO keyspace连接成功后,请按以下顺序验证:
本技能会优先使用以下环境变量(如存在):
DATABASE_URL — 完整的连接字符串(优先级最高)DB_HOST, DB_PORT, DB_NAME, DB_USER, DB_PASSWORD — 分离的连接参数DB_TYPE — 数据库类型:postgres/mysql/sqlite/mongo/redis已收录 5 个 Skill