English README | 中文说明
一个基于 Model Context Protocol (MCP) 的多模态 AI 工具箱,集成了智谱 GLM、Pollinations.AI、思源笔记和 Perplexity 网络搜索四大平台的强大能力。
在使用 智谱 GLM 的 Claude Code 套餐时,我发现了一个限制:
我认为:
于是,我开发了这个 MCP 插件:
pnpm install
访问 智谱AI开放平台 获取 API Key:
export GLM_API_KEY=your_glm_api_key_here
访问 Perplexity AI 获取 API Key:
export PERPLEXITY_API_KEY=your_perplexity_api_key_here
# GLM 模型配置
GLM_IMAGE_MODEL=glm-4.5v
GLM_VIDEO_MODEL=glm-4.5v
GLM_GENERATION_MODEL=cogview-3-flash
# 思源笔记配置(可选)
SIYUAN_API_TOKEN=your_siyuan_token
SIYUAN_API_BASE=http://127.0.0.1:6806
# 网络搜索配置(可选)
WEB_SEARCH_CACHE_TTL=30
WEB_SEARCH_RATE_LIMIT=5
WEB_SEARCH_RATE_WINDOW_MS=60000
WEB_SEARCH_RETRY_AFTER_MS=1000
WEB_SEARCH_TIMEOUT_MS=10000
.env 文件.env 文件pnpm dev
注意: 开发模式使用 node --loader ts-node/esm 运行,确保 ES 模块导入正常工作。
pnpm build
pnpm start
./build/index.js
参数:
- image_path (string): 图片文件路径
- prompt (string): 分析提示文本
- temperature (number, 可选): 采样温度 (0.0-1.0)
- top_p (number, 可选): 采样参数 (0.0-1.0)
- max_tokens (number, 可选): 最大输出令牌数
示例:
{
"image_path": "/path/to/image.jpg",
"prompt": "请详细描述这张图片的内容"
}
参数:
- video_url (string): 视频文件 URL
- prompt (string): 分析提示文本
- temperature (number, 可选): 采样温度 (0.0-1.0)
- top_p (number, 可选): 采样参数 (0.0-1.0)
- max_tokens (number, 可选): 最大输出令牌数
示例:
{
"video_url": "https://example.com/video.mp4",
"prompt": "分析这个视频的主要内容"
}
参数:
- prompt (string): 图片描述文本
- quality (string, 可选): 图片质量 (hd/standard)
- size (string, 可选): 图片尺寸
- save_path (string, 可选): 图片保存路径
示例:
{
"prompt": "一只可爱的小猫咪,卡通风格",
"quality": "standard",
"size": "1024x1024",
"save_path": "./cat.png"
}
参数:
- prompt (string): 图片描述文本
- model (string, 可选): 生成模型 (默认: flux)
- width (number, 可选): 图片宽度 (64-2048)
- height (number, 可选): 图片高度 (64-2048)
- seed (number, 可选): 随机种子
- nologo (boolean, 可选): 禁用 logo
- private (boolean, 可选): 私有生成
- enhance (boolean, 可选): 增强提示词
- safe (boolean, 可选): 安全过滤
- transparent (boolean, 可选): 透明背景
示例:
{
"prompt": "A beautiful landscape with mountains",
"model": "flux",
"width": 1024,
"height": 768
}
参数:
- prompt (string): 文本提示
- model (string, 可选): 生成模型 (默认: openai)
- temperature (number, 可选): 随机性 (0.0-3.0)
- top_p (number, 可选): 核心采样 (0.0-1.0)
- json (boolean, 可选): JSON 格式输出
- system (string, 可选): 系统提示词
- stream (boolean, 可选): 流式输出
示例:
{
"prompt": "写一首关于春天的诗",
"model": "openai",
"temperature": 0.8
}
参数:
- prompt (string): 要转换的文本
- voice (string, 可选): 声音选择 (alloy/echo/fable/onyx/nova/shimmer)
- model (string, 可选): 音频模型 (默认: openai-audio)
示例:
{
"prompt": "你好,欢迎使用我们的服务!",
"voice": "nova"
}
参数:
- image_path (string, 可选): 本地图片路径
- image_url (string, 可选): 图片 URL
- prompt (string): 分析提示文本
- model (string, 可选): 分析模型 (默认: openai)
- max_tokens (number, 可选): 最大输出令牌数
示例:
{
"image_path": "/path/to/image.jpg",
"prompt": "What's in this image?",
"model": "openai"
}
参数:
- q (string): 搜索查询文本
- top_k (number, 可选): 返回结果数量 (1-20, 默认: 10)
- time_range (string, 可选): 时间范围 (any/day/week/month/year, 默认: any)
- site (string, 可选): 限制搜索站点
- lang (string, 可选): 搜索语言 (默认: zh)
- region (string, 可选): 搜索区域 (默认: CN)
- safe_mode (boolean, 可选): 安全搜索模式 (默认: true)
- include_snippets (boolean, 可选): 包含摘要片段 (默认: true)
示例:
{
"q": "人工智能最新发展",
"top_k": 5,
"time_range": "month",
"lang": "zh",
"region": "CN"
}
参数:
- q (string): 搜索查询文本
- top_k (number, 可选): 返回结果数量 (1-20, 默认: 10)
- time_range (string, 可选): 时间范围 (any/day/week/month/year, 默认: any)
- site (string, 可选): 限制搜索站点
- lang (string, 可选): 搜索语言 (默认: zh)
- region (string, 可选): 搜索区域 (默认: CN)
- safe_mode (boolean, 可选): 安全搜索模式 (默认: true)
- include_snippets (boolean, 可选): 包含摘要片段 (默认: true)
- operators (array, 可选): 搜索操作符 (OR/AND)
- exclude_sites (array, 可选): 排除站点列表
- from (string, 可选): 起始日期 (YYYY-MM-DD)
- to (string, 可选): 结束日期 (YYYY-MM-DD)
- dedupe (string, 可选): 去重策略 (none/domain/title, 默认: none)
- aggregate (boolean, 可选): 聚合相似结果
- engine (string, 可选): 搜索引擎 (raw_search/sonar_answer)
- sonar_model (string, 可选): Sonar模型 (sonar/sonar-pro/sonar-reasoning/sonar-reasoning-pro/sonar-deep-research)
示例:
{
"q": "机器学习研究论文",
"top_k": 10,
"time_range": "year",
"exclude_sites": ["example.com", "spam.com"],
"from": "2023-01-01",
"to": "2023-12-31",
"dedupe": "domain",
"engine": "sonar_answer",
"sonar_model": "sonar-reasoning-pro"
}
参数:
- block_id (string|array): 单个块ID或块ID数组
示例:
{
"block_id": "20240825123456-1a2b3c4d"
}
多块获取示例:
{
"block_id": ["20240825123456-1a2b3c4d", "20240825123456-5e6f7g8h"]
}
参数:
- block_id (string): 要更新的块ID
- data (string): 新的Kramdown内容数据
- data_type (string, 可选): 数据类型 (markdown/dom,默认: markdown)
示例:
{
"block_id": "20240825123456-1a2b3c4d",
"data": "# 新标题\n\n更新后的内容",
"data_type": "markdown"
}
参数:
- query (string): 搜索查询文本,支持完整全文查询语法
- paths (array, 可选): 指定搜索路径
- page (number, 可选): 分页页码
搜索语法示例:
{
"query": "机器学习 OR 深度学习",
"paths": ["/笔记/技术/"],
"page": 1
}
高级查询示例:
{
"query": "NEAR(人工智能 算法, 10) -广告",
"page": 1
}
支持的查询操作符: - OR - 逻辑或:包含任一即可 - NEAR(词1 词2, N) - 邻近搜索:距离在N词内 - AND - 逻辑与:必须同时包含 - ^词 - 权重提升:提高重要性 - -词 - 排除:明确排除 - (查询) - 分组:组合逻辑
参数:
- stmt (string): SQL 查询语句,例如: SELECT * FROM blocks WHERE type = 'av' LIMIT 10
- limit (number, 可选): 限制返回结果的数量
- offset (number, 可选): 偏移量,用于分页查询
示例:
{
"stmt": "SELECT * FROM blocks WHERE type = 'av'",
"limit": 10
}
高级查询示例:
{
"stmt": "SELECT b.id, b.content, a.name, a.value FROM blocks b JOIN attributes a ON b.id = a.block_id WHERE b.parent_id = '数据库块ID'",
"limit": 20,
"offset": 0
}
参数:
- stmt (string): SQL 查询语句,例如: SELECT * FROM blocks WHERE content LIKE '%content%' LIMIT 7
示例:
{
"stmt": "SELECT * FROM blocks WHERE type = 'd' LIMIT 5"
}
高级查询示例:
{
"stmt": "SELECT distinct B.* from blocks as B join attributes as A on B.id = A.block_id where A.name like 'custom-dailynote-%' and B.type='d' and A.value >= '20231010' and A.value <= '20231013' order by A.value desc"
}
项目包含完整的日志记录系统,所有工具调用都会记录到项目根目录的 mcpserver.log 文件中:
src/
├── config/
│ ├── index.ts # GLM 配置和默认参数
│ └── pollinations.ts # Pollinations.AI 配置
├── tools/
│ ├── bigmodel/ # 智谱 GLM 工具
│ │ ├── image-analysis.ts # 图片分析工具
│ │ ├── video-analysis.ts # 视频分析工具
│ │ └── image-generation.ts # 图片生成工具
│ ├── pollinations/ # Pollinations.AI 工具
│ │ ├── image-generation.ts # 图片生成工具
│ │ ├── text-generation.ts # 文本生成工具
│ │ ├── audio-generation.ts # 音频生成工具
│ │ └── image-analysis.ts # 图片分析工具
│ ├── siyuan/ # 思源笔记工具
│ │ ├── block-kramdown.ts # 块级 Kramdown 获取工具
│ │ ├── database-query.ts # 数据库查询工具
│ │ ├── sql-query.ts # SQL 查询工具
│ │ ├── search.ts # 全文搜索工具
│ │ ├── client.ts # 思源 API 客户端
│ │ └── index.ts # 思源工具索引
│ └── web-search/ # 网络搜索工具
│ ├── web-search.ts # 网络搜索工具实现
│ ├── advanced-web-search.ts # 高级网络搜索工具实现
│ ├── client.ts # Perplexity API 客户端
│ ├── sonar-client.ts # Sonar 模型客户端
│ ├── cache.ts # 缓存实现
│ ├── rate-limiter.ts # 限速器实现
│ ├── security.ts # 安全工具
│ ├── errors.ts # 错误处理
│ └── types.ts # 类型定义
├── utils/
│ ├── helpers.ts # 通用助手函数
│ ├── common.ts # 响应格式化函数
│ └── logger.ts # 日志系统
└── index.ts # 主服务器入口,工具注册
ISC
欢迎提交 Issue 和 Pull Request!
如有问题,请创建 Issue 或联系维护者。
本项目 fork 自 2234839 崮生 的项目,在此基础上进行了功能增强和扩展,已向原项目提交了 feature PR。
感谢原作者的杰出工作!🎉
$ claude mcp add mcpserver \
-- python -m otcore.mcp_server <graph>