astrbot-mcp
Enables web search through DuckDuckGo as a supported search backend for the web_search tool.
Provides tools for GitHub operations such as searching repositories and code, retrieving repos, issues, and files, listing issues, and creating issues when write access is enabled.
Supports optional OpenAI-compatible embeddings for knowledge base vector search and hybrid retrieval.
Enables web search through a SearXNG instance as a supported search backend.
Provides sandboxed SQLite tools to list tables, describe schemas, run read-only queries, and execute single write statements when enabled.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@astrbot-mcp Search the web for the latest Python release and summarize the changes."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
AstrBot-MCP
一个可独立运行的 MCP(Model Context Protocol)服务器,外加一个 AstrBot 插件桥接。
它把 HTTP、搜索、天气/时间/汇率、文件、SQLite、GitHub、邮件、日历和可自学习知识库统一封装成 MCP 工具,供 AstrBot Agent 调用。
MCP 传输:
stdio、sse、streamable-http鉴权:HTTP 模式支持
Authorization: Bearer <token>,并提供/health安全:SSRF 防护、文件/数据库沙箱、写操作默认关闭
知识库:SQLite + FTS5(中文友好的 trigram)+ 可选 OpenAI 兼容向量检索
AstrBot 插件:多 MCP 服务器聚合、工具自动注册、
/mcp指令、知识库自动学习
flowchart LR
U[用户] --> A[AstrBot<br/>Agent]
A -->|原生 MCP 或插件桥接| S[astrbot-mcp<br/>MCP Server]
S --> H[HTTP / REST]
S --> W[网页搜索 / 抓取]
S --> P[天气 / 时间 / 汇率]
S --> F[文件沙箱]
S --> D[(SQLite)]
S --> G[GitHub]
S --> M[SMTP / IMAP]
S --> C[日历 .ics]
S --> K[(知识库<br/>FTS5 + 可选向量)]1. 快速开始
1.1 本地安装
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
cp config.example.yaml config.yaml
# 按需填写 API Key,或使用环境变量
astrbot-mcp --check-config # 查看解析后的配置(密钥已脱敏)
astrbot-mcp --list-tools # 查看注册了哪些工具1.2 运行 MCP 服务器
# stdio(由 AstrBot 等客户端拉起)
astrbot-mcp --config config.yaml
# Streamable HTTP
astrbot-mcp --config config.yaml --transport streamable-http --host 0.0.0.0 --port 8765
# 旧版 SSE
astrbot-mcp --config config.yaml --transport sse --host 0.0.0.0 --port 8765HTTP 模式端点:
路径 | 说明 |
| Streamable HTTP MCP 端点 |
| SSE 端点 |
| SSE 消息端点 |
| 健康检查(无需鉴权) |
配置了 server.auth_token 后,除 /health 外都需要:
Authorization: Bearer <token>1.3 Docker
cp config.example.yaml config.yaml
# 修改 config.yaml 中的 auth_token / 服务开关 / API Key
docker compose up -d --build
curl http://127.0.0.1:8765/health数据目录 ./data 会被挂载到容器内 /app/data,包含知识库、文件沙箱、SQLite 和日历。
Related MCP server: ai-mcp
2. 接入 AstrBot
有两条路,任选其一;也可以同时使用。
方式 A:AstrBot 原生 MCP(最简单)
在 AstrBot WebUI 打开 插件 → MCP → 新增服务器,粘贴下面任一配置。
stdio(服务器安装在 AstrBot 所在环境)
{
"transport": "stdio",
"command": "/path/to/Astrbot-MCP/.venv/bin/python",
"args": ["-m", "astrbot_mcp", "--config", "/path/to/Astrbot-MCP/config.yaml"],
"cwd": "/path/to/Astrbot-MCP"
}AstrBot 会校验 stdio 命令名。请使用
.../bin/python -m astrbot_mcp,不要直接写astrbot-mcp(命令名astrbot-mcp不在默认白名单中);python、python3、uv、uvx、npx等均在白名单内。
Streamable HTTP
{
"transport": "streamable_http",
"url": "http://127.0.0.1:8765/mcp",
"headers": { "Authorization": "Bearer <你的 token>" }
}AstrBot 与 MCP 服务器都在 Docker Compose 中时,把 127.0.0.1 换成服务名,例如 http://astrbot-mcp:8765/mcp。
方式 B:插件桥接(聚合多个 MCP 服务器)
插件适合以下场景:
同时连接多个 MCP 服务器,统一管理
把每个 MCP 工具自动注册成 AstrBot 的 LLM 工具
用
/mcp指令手动查看/调用开启知识库自动学习
安装:
# 把本仓库的 astrbot_plugin 目录复制到 AstrBot 的插件目录,并改名为插件名
cp -r astrbot_plugin /path/to/AstrBot/data/plugins/astrbot_plugin_mcp_bridge重启 AstrBot(或在 WebUI 重载插件),然后在 插件管理 → MCP 服务桥接 → 配置 中填写 servers_json:
{
"mcpServers": {
"astrbot-mcp": {
"transport": "stdio",
"command": "/path/to/Astrbot-MCP/.venv/bin/python",
"args": ["-m", "astrbot_mcp", "--config", "/path/to/Astrbot-MCP/config.yaml"],
"cwd": "/path/to/Astrbot-MCP"
},
"remote-example": {
"transport": "streamable_http",
"url": "http://127.0.0.1:8765/mcp",
"headers": { "Authorization": "Bearer <token>" }
}
}
}旧版 AstrBot 没有 template_list 可视化编辑器时,servers_json 同样可用。也支持直接写数组或“名称 → 配置”的对象:
[
{ "name": "astrbot-mcp", "command": "python", "args": ["-m", "astrbot_mcp"] }
]插件配置项(_conf_schema.json):
配置 | 默认 | 说明 |
|
| 可视化服务器列表(AstrBot ≥ 4.10.4) |
|
| JSON 配置,与 |
|
| 把 MCP 工具自动注册为 LLM 工具 |
|
| 自动工具名前缀,最终形如 |
|
| 工具名最大长度,超长会加哈希后缀 |
|
| 全局工具黑名单,逗号分隔 |
|
| 每个服务器最多注册的工具数 |
|
| 连接超时(秒) |
|
| 工具调用超时(秒) |
| 见下文 | 知识库自动学习配置 |
auto_register=false 时仍保留三个通用工具:
mcp_list_servers:查看服务器与连接状态mcp_list_tools(server):查看某服务器的工具mcp_call_tool(server, tool, arguments):手动调用
插件指令:
/mcp list 查看服务器状态
/mcp tools <server> 查看工具列表
/mcp call <server> <tool> <json> 调用工具
/mcp reload 重连并重新注册(管理员)
/mcp help 帮助3. 工具清单
通用 HTTP
工具 | 说明 |
| 任意 REST 请求;支持 method/headers/params/JSON/原始 body、大小限制、逐跳重定向校验 |
搜索与抓取
工具 | 说明 |
| DuckDuckGo / Tavily / Bing / SearXNG |
| 抓取网页并提取正文与链接(带 SSRF 防护) |
公共 API(无需 Key)
工具 | 说明 |
| Open-Meteo 天气与多日预报 |
| 任意 IANA 时区当前时间 |
| 实时汇率换算 |
文件沙箱
工具 | 说明 |
| 列目录、按行读文本、查看元信息 |
| 在文本文件中搜索(支持正则) |
| 写操作,需显式开启 |
所有路径都被限制在 services.files.root 内,符号链接逃逸会被拒绝。
SQLite
工具 | 说明 |
| 查看表和结构 |
| 只读连接执行查询 |
| 单条写语句,需 |
数据库文件被限制在 services.sqlite.root 内。
GitHub
github_search_repos、github_get_repo、github_list_issues、github_get_issue、github_get_file、github_search_code、github_create_issue。
公开读取不需要 token;代码搜索和写操作需要
GITHUB_TOKENgithub_create_issue还需要services.github.allow_write=true
邮件(默认关闭)
mail_send、mail_list、mail_read。使用标准库 SMTP/IMAP,需在 services.mail 配置服务器与账号。
日历(默认关闭)
calendar_list、calendar_list_events、calendar_add_event、calendar_delete_event。
数据保存为 .ics 文件,可被其他日历软件导入;写入时会嵌入 VTIMEZONE,时区可正确往返。
知识库与自学习
工具 | 说明 |
| 按 |
| 记住一条事实,内容哈希自动去重 |
| 关键词 + 可选向量检索,RRF 融合 |
| 抓取网页、提取正文并入库 |
| 从 |
| 管理文档 |
| 统计、重建 FTS、导出 JSON |
知识库默认使用 SQLite FTS5:
优先
trigram分词,对中文子串检索友好不支持 trigram 的环境回退
unicode61FTS5 完全不可用时自动回退
LIKE
可选向量检索(任意 OpenAI 兼容 /embeddings 接口):
services:
knowledge:
embedding:
enabled: true
base_url: ${EMBEDDING_BASE_URL}
api_key: ${OPENAI_API_KEY}
model: text-embedding-3-small
dimensions: 04. 知识库自动学习
有两种“自学习”方式。
4.1 Agent 主动学习
模型在对话中直接调用:
kb_remember(content="用户偏好中文回答", tags="preference")
kb_learn_url(url="https://example.com/article", tags="docs")建议在 AstrBot 的 system prompt 中加一句:
当用户提供值得长期保存的事实、偏好或结论时,调用
kb_remember保存;需要参考资料时先调用kb_search。
4.2 插件自动学习
在插件配置中开启:
{
"auto_learn": {
"enabled": true,
"knowledge_server": "astrbot-mcp",
"tool_name": "kb_remember",
"tags": "auto-learned",
"min_message_chars": 20,
"max_conversation_chars": 4000,
"learn_in_group": false
}
}工作方式:
每轮 LLM 回复后,插件用当前会话模型(或
provider_id指定模型)提取长期记忆提取结果写入
knowledge_server的tool_name相同对话内容会被哈希去重
默认只在私聊触发,避免把群聊内容写入长期记忆
注意:这会为每轮对话额外调用一次 LLM,产生 token 消耗;不需要时请保持关闭。
5. 配置参考
完整配置见 config.example.yaml。
5.1 环境变量
所有配置项都支持 ${VAR} 和 ${VAR:-default} 展开。本地开发可先复制模板:
cp .env.example .env # docker compose 会自动读取 .env变量 | 用途 |
| 配置文件路径 |
| 覆盖传输方式 |
| 覆盖监听地址/端口 |
| HTTP Bearer token |
| GitHub API token |
| 搜索后端 |
| 邮箱密码/授权码 |
| 向量检索 |
5.2 路径规则
相对路径以配置文件所在目录为基准
files.root、sqlite.root、calendar.root、knowledge.db_path会被转换为绝对路径文件、数据库、日历、知识库导出均限制在各自根目录内
5.3 安全模型
保护 | 说明 |
SSRF | 默认拒绝私网/回环/链路本地/保留地址;重定向逐跳校验 |
域名策略 |
|
写操作 | 文件、SQLite、GitHub 写操作默认关闭 |
路径逃逸 |
|
HTTP 鉴权 |
|
密钥 | 支持环境变量注入; |
残余风险:DNS 在校验与连接时各解析一次,恶意 DNS 重绑定理论上可绕过;对不可信网络建议配合 egress 防火墙/反向代理。日历、知识库是明文文件,请自行控制目录权限。
6. 配置示例
6.1 使用 Tavily 搜索
export TAVILY_API_KEY=tvly-xxxservices:
web_search:
provider: tavily
api_key: ${TAVILY_API_KEY}DuckDuckGo 无需 Key,但数据中心 IP 可能被限流;此时会回退到 Lite 端点,仍失败则建议改用 Tavily/Bing/SearXNG。
6.2 开启文件与 SQLite 写入
services:
files:
root: ./data/files
allow_write: true
allow_delete: false
sqlite:
root: ./data/sqlite
allow_write: true6.3 邮件
services:
mail:
enabled: true
smtp_host: smtp.example.com
smtp_port: 465
smtp_ssl: true
username: bot@example.com
password: ${MAIL_PASSWORD}
from_addr: bot@example.com
imap_host: imap.example.com
imap_port: 993
imap_ssl: true国内邮箱通常需要使用“授权码”而不是登录密码。
6.4 允许访问内网服务
security:
allow_private_networks: true仅在你清楚风险时开启,例如让 MCP 访问局域网 Home Assistant / Ollama。
7. 开发与测试
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
pytest -q # 全部单元测试(离线,不访问网络)
pytest -q --cov=astrbot_mcp --cov-report=term-missing
ruff check src astrbot_plugin tests # Lint
ruff format --check src astrbot_plugin tests
astrbot-mcp --check-config
astrbot-mcp --list-tools测试通过 httpx.MockTransport 模拟外部 API,不会发起真实网络请求;GitHub Actions
(.github/workflows/ci.yml)会在 Python 3.10–3.13 上运行 lint、测试和 CLI 冒烟检查。
目录结构:
.
├── src/astrbot_mcp/
│ ├── __main__.py # CLI 入口
│ ├── server.py # FastMCP、HTTP 网关、鉴权、/health
│ ├── config.py # YAML + 环境变量 + 路径解析
│ ├── net.py # SSRF 防护与安全请求
│ ├── registry.py # 服务注册
│ └── services/ # 各服务适配器
├── astrbot_plugin/ # AstrBot 插件(复制到 data/plugins/)
├── tests/ # pytest 用例(conftest.py 提供离线 HTTP 夹具)
├── .github/workflows/ # CI:lint + 多版本测试
├── config.example.yaml
├── Dockerfile
└── docker-compose.yml8. FAQ
AstrBot 报 “command not allowed” 或找不到 uvx/npx
AstrBot 只允许白名单中的命令,并且依赖必须装在 AstrBot 所在环境/容器内。优先使用 <venv>/bin/python -m astrbot_mcp;Docker 部署建议改用 HTTP 传输。
Docker 里 AstrBot 连不上 127.0.0.1:8765
容器内的 127.0.0.1 指向 AstrBot 自己。使用同一 Compose 网络中的服务名,或宿主机 IP。
MCP 工具没有出现在模型的函数列表里
确认模型支持 function calling、插件已连接服务器;工具太多时可用 tool_denylist、每个服务器的 ignore_tools、max_tools_per_server 限制数量,或关闭 auto_register 只用 mcp_call_tool。
搜索返回 0 条
DuckDuckGo 可能限流。配置 Tavily / Bing / SearXNG 作为后端。
知识库中文检索效果
默认使用 SQLite FTS5 trigram;若你的 SQLite 太旧,会回退到 unicode61 或 LIKE。可开启向量检索提升语义召回。
邮件/日历工具没有出现
它们在示例配置中默认 enabled: false,开启并填好配置后重启即可。
9. 许可证
Available Tools
35 toolsconvert_currencyA
按实时汇率换算货币(open.er-api.com,无需 API Key)。
Args: amount: 金额。 from_currency: 源货币代码,例如 USD、CNY、EUR。 to_currency: 目标货币代码,例如 JPY、GBP。
Inputs: amount (required), to_currency (required), from_currency (required). Returns: result
fs_deleteA
删除沙箱内的文件或目录(需开启 files.allow_delete)。
Args: path: 相对于沙箱根目录的路径。 recursive: 删除目录时必须为 true。
Inputs: path (required), recursive. Returns: result
fs_listB
列出沙箱目录中的文件与子目录。
Args: path: 相对于沙箱根目录的路径,默认 "."。 pattern: 文件名匹配模式,默认 "*"。 recursive: 是否递归子目录。 include_hidden: 是否包含以点开头的隐藏文件。 max_results: 最多返回条目数,1-1000。
Inputs: path, pattern, recursive, max_results, +1 more. Returns: result
fs_mkdirA
在沙箱内创建目录(需开启 files.allow_write)。
Args: path: 相对于沙箱根目录的目录路径。
Inputs: path (required). Returns: result
fs_readA
读取沙箱内的文本文件,可按行截取。
Args: path: 相对于沙箱根目录的文件路径。 start_line: 起始行号(从 1 开始)。 end_line: 结束行号;0 表示读到文件末尾。 max_bytes: 最多读取的字节数;0 表示使用配置上限。
Inputs: path (required), end_line, max_bytes, start_line. Returns: result
fs_searchA
在沙箱文本文件中搜索内容。
Args: query: 要查找的文本或正则表达式。 path: 搜索起点,相对于沙箱根目录。 pattern: 文件名过滤模式,例如 "*.py"。 max_results: 最多返回的匹配行数,1-500。 use_regex: 是否把 query 当作正则表达式。 case_sensitive: 是否区分大小写。
Inputs: query (required), path, pattern, use_regex, +2 more. Returns: result
fs_statB
查看沙箱内文件或目录的元信息。
Args: path: 相对于沙箱根目录的路径。
Inputs: path (required). Returns: result
fs_writeA
向沙箱内写入文本文件(需开启 files.allow_write)。
Args: path: 相对于沙箱根目录的文件路径。 content: 要写入的文本内容。 append: 是否追加而不是覆盖。 create_dirs: 是否自动创建父目录。
Inputs: path (required), content (required), append, create_dirs. Returns: result
get_timeA
获取指定时区的当前时间。
Args: timezone: IANA 时区名,例如 Asia/Shanghai、UTC、America/New_York。
Inputs: timezone. Returns: result
get_weatherA
查询城市天气(Open-Meteo,无需 API Key)。
Args: location: 城市名称,例如 北京、Shanghai、Tokyo。 days: 预报天数,1-16。
Inputs: location (required), days. Returns: result
github_create_issueA
创建 GitHub Issue(需开启 github.allow_write 且配置 token)。
Args: owner: 仓库拥有者。 repo: 仓库名称。 title: Issue 标题。 body: Issue 正文(Markdown)。 labels: 标签名称列表。
Inputs: repo (required), owner (required), title (required), body, +1 more. Returns: result
github_get_fileB
读取仓库中的文件内容。
Args: owner: 仓库拥有者。 repo: 仓库名称。 path: 文件路径,例如 src/main.py。 ref: 分支、标签或 commit SHA;留空使用默认分支。
Inputs: path (required), repo (required), owner (required), ref. Returns: result
github_get_issueB
获取单个 Issue 或 PR 的正文。
Args: owner: 仓库拥有者。 repo: 仓库名称。 number: Issue 或 PR 编号。
Inputs: repo (required), owner (required), number (required). Returns: result
github_get_repoC
获取 GitHub 仓库详情。
Args: owner: 仓库拥有者。 repo: 仓库名称。
Inputs: repo (required), owner (required). Returns: result
github_list_issuesA
列出仓库的 Issue(可选是否包含 Pull Request)。
Args: owner: 仓库拥有者。 repo: 仓库名称。 state: open、closed 或 all。 labels: 逗号分隔的标签过滤。 include_pulls: 是否把 Pull Request 也包含在结果中。 per_page: 返回数量,1-100;0 表示使用配置值。
Inputs: repo (required), owner (required), state, labels, +2 more. Returns: result
github_search_codeB
搜索 GitHub 代码(需要配置 token)。
Args: query: 搜索语法,例如 "repo:AstrBotDevs/AstrBot mcp"。 per_page: 返回数量,1-100。
Inputs: query (required), per_page. Returns: result
github_search_reposB
搜索 GitHub 仓库。
Args: query: GitHub 搜索语法,例如 "language:python mcp"。 sort: 排序字段,可选 stars、forks、updated。 per_page: 返回数量,1-100;0 表示使用配置值。
Inputs: query (required), sort, per_page. Returns: result
http_requestA
发送任意 HTTP/REST 请求,用于访问未单独接入的开放 API。
Args: method: HTTP 方法,支持 GET、POST、PUT、PATCH、DELETE、HEAD、OPTIONS。 url: 完整 URL,必须是 http:// 或 https:// 开头。 headers: 附加请求头,例如 {"Authorization": "Bearer ..."}。 params: URL 查询参数对象。 json_body: 以 JSON 发送的请求体(对象或数组)。 body: 原始字符串请求体,与 json_body 二选一。 timeout: 请求超时秒数。 max_bytes: 最多读取的响应字节数,超出会被截断。 follow_redirects: 是否跟随重定向;每一跳都会重新执行安全检查。
Inputs: url (required), method (required), body, params, +5 more. Returns: result
kb_addA
向知识库添加或更新一篇文档。
Args: source: 文档唯一标识,例如 URL、文件路径或自定义 ID。 content: 文档正文。 title: 标题。 tags: 逗号分隔的标签,便于后续过滤。 replace: source 已存在时是否覆盖。
Inputs: source (required), content (required), tags, title, +1 more. Returns: result
kb_deleteC
按 ID 或 source 删除知识库文档。
Args: key: 文档 ID 或 source。
Inputs: key (required). Returns: result
kb_exportA
导出知识库为 JSON。
Args: path: 导出文件路径(必须在知识库目录内);留空则直接返回 JSON。 include_embeddings: 是否包含向量数据。
Inputs: path, include_embeddings. Returns: result
kb_getB
按 ID 或 source 读取一篇知识库文档。
Args: key: 文档 ID、source 或 URL。 max_chars: 正文最大字符数,100-200000。
Inputs: key (required), max_chars. Returns: result
kb_learn_fileB
从本地文本文件学习内容并写入知识库。
Args: path: 相对于 files.root 沙箱的文件路径。 tags: 逗号分隔的标签。
Inputs: path (required), tags. Returns: result
kb_learn_urlB
抓取网页、提取正文并写入知识库(自学习入口)。
Args: url: 要学习的 http/https 地址。 tags: 逗号分隔的标签。 title: 可选标题;留空使用网页标题。
Inputs: url (required), tags, title. Returns: result
kb_listB
列出知识库中的文档。
Args: limit: 返回数量,1-500。 offset: 分页偏移。 tags: 逗号分隔的标签过滤。
Inputs: tags, limit, offset. Returns: result
kb_reindexA
重建全文索引(在数据库被外部修改后使用)。
Inputs: no named parameters. Returns: result
kb_rememberA
记住一条事实或笔记(供 Agent 自学习时调用;自动去重)。
Args: content: 要长期记住的内容。 title: 可选标题。 tags: 逗号分隔的标签。 source: 可选唯一标识;默认按内容哈希生成。
Inputs: content (required), tags, title, source. Returns: result
kb_searchB
检索知识库,返回最相关的片段。
Args: query: 查询文本。 top_k: 返回片段数,1-50;0 表示使用配置值。 tags: 逗号分隔的标签过滤(需全部匹配)。
Inputs: query (required), tags, top_k. Returns: result
kb_statsA
查看知识库统计信息(文档数、片段数、FTS 与向量状态)。
Inputs: no named parameters. Returns: result
sqlite_describeB
查看 SQLite 表结构。
Args: database: 数据库文件名或沙箱内的路径。 table: 表名或视图名。
Inputs: table (required), database (required). Returns: result
sqlite_executeA
执行单条写操作 SQL(需开启 sqlite.allow_write)。
Args: database: 数据库文件名或沙箱内的路径;不存在时会创建。 sql: 单条 INSERT / UPDATE / DELETE / CREATE 等语句。 params: 绑定参数列表,使用 ? 占位符。
Inputs: sql (required), database (required), params. Returns: result
sqlite_list_tablesA
列出 SQLite 数据库中的表和视图。
Args: database: 数据库文件名(相对于 sqlite.root)或沙箱内的路径。
Inputs: database (required). Returns: result
sqlite_queryA
以只读方式执行 SQL 查询。
Args: database: 数据库文件名或沙箱内的路径。 sql: 单条 SQL 查询语句(SELECT / WITH / PRAGMA 等)。 params: 绑定参数列表,使用 ? 占位符。 max_rows: 最多返回行数;0 表示使用配置上限。
Inputs: sql (required), database (required), params, max_rows. Returns: result
web_fetchA
抓取网页并提取可读正文,用于阅读搜索结果或在线文档。
Args: url: 要抓取的 http/https URL。 max_chars: 正文字符上限,100-50000。 include_links: 是否同时返回页面中的链接。 max_links: include_links=true 时最多返回多少条链接。
Inputs: url (required), max_chars, max_links, include_links. Returns: result
web_searchA
搜索网页并返回标题、链接与摘要。
Args: query: 搜索关键词。 max_results: 返回结果数量,1-20。 provider: 临时覆盖配置的搜索后端,可选 duckduckgo、tavily、bing、searxng;留空使用配置值。
Inputs: query (required), provider, max_results. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 35 tools
Prefix-based grouping (fs_, sqlite_, github_, kb_, web_) makes most tools clearly distinct, and read/list/search/stat are well separated within each domain. The main ambiguity is the knowledge-base ingestion quartet (kb_add, kb_remember, kb_learn_url, kb_learn_file), which all write documents with overlapping semantics, plus some overlap between web_fetch, http_request, and kb_learn_url.
Almost everything follows a predictable snake_case prefix_verb/noun pattern (fs_read, sqlite_query, github_create_issue, kb_search). The only deviations are the three unprefixed standalone utilities (get_weather, get_time, convert_currency) and slight verb inconsistency between kb_add and kb_remember.
35 tools is heavy on its own, but the server is explicitly a multi-domain toolkit (filesystem, SQLite, GitHub, knowledge base, web, utilities), so each domain contributes a bounded, purposeful subset. Still, the sheer surface is large enough that an agent must route across many prefixes, and the three one-off utility tools feel peripheral.
Filesystem and SQLite cover full CRUD lifecycles, the knowledge base has add/search/get/list/stats/reindex/delete/export, and web access is covered by search, fetch, and a generic http_request. GitHub is the weakest area: no PR creation/merge, no update/close issue, and no comment operations, but the read/create core is present.
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
MCP server exposing the Backtest360 engine API as tools for AI agents.
Hosted MCP server for live public-data APIs and Skills for AI agents.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA production-ready Python MCP server providing tools for fetching live weather data, querying local SQLite databases, reading files, summarizing webpages, and performing safe mathematical calculations. It enables MCP-compatible LLM clients to execute these tasks autonomously as part of agentic workflows.-
- FlicenseAqualityDmaintenanceLightweight MCP server that exposes tools for system information and weather lookup, designed for agent integration via stdio.1-
- AlicenseNot gradedqualityBmaintenanceA passive MCP server that exposes a toolbox of executable tools (shell, network, HTTP, AI search, SSH, S3 file operations) to autonomous agents via Streamable HTTP, with strong security features including Docker sandboxing and WAF.2Apache 2.0
- FlicenseNot gradedqualityDmaintenanceEnterprise MCP server providing a suite of tools including file, database, GitHub, Slack, calendar, email, vector search, and Python execution, with safe defaults and OpenAI integration for automatic tool selection.-