n8n爪子技能
技能目录 n8n爪 MCP服务器。使用单个聊天命令安装预先构建的API集成-无需编码。
可用技能
分析
沟通
| 技能 |
描述 |
证书 |
作者 |
| 电子邮件(IMAP/SMTP) |
通过IMAP/SMTP |
读取和发送电子邮件 |
电子邮件地址、密码、IMAP主机、SMTP主机 |
| Gmail |
通过Gmail API |
Google OAuth2搜索、阅读、发送电子邮件和管理草稿 |
@弗雷迪·舒茨 |
| 开爪 |
通过网关API连接到OpenClaw自主人工智能代理 |
网关URL,网关令牌 |
@弗雷迪·舒茨 |
娱乐
金融
知识
语言
营销
| 技能 |
描述 |
证书 |
作者 |
| Google广告 |
通过GAQL(Beta版)查询活动、广告组和性能数据 |
谷歌OAuth2、开发者令牌、客户ID |
@弗雷迪·舒茨 |
会议
| 技能 |
描述 |
证书 |
作者 |
| Vexa会议 |
将转录机器人部署到Google Meet、Teams和Zoom会议 |
Vexa API Key |
@弗雷迪·舒茨 |
网络
生产力
| 技能 |
描述 |
证书 |
作者 |
| CalDAV日历 |
管理任何CalDAV服务器上的日历--列出、创建、更新、删除事件(Nextcloud、Radicale、Baikal) |
CalDAV URL、用户名、密码 |
@弗雷迪·舒茨 |
| GitHub |
完整的GitHub集成:仓库、问题、PR、代码搜索、文件内容、发布、通知 |
GitHub PAT |
@弗雷迪·舒茨 |
| 谷歌日历 |
在Google日历中列出、创建、更新、删除事件 |
Google OAuth2 |
@弗雷迪·舒茨 |
| Nextcloud文件 |
通过WebDAV管理Nextcloud上的文件——列表、读取、写入、从URL上传、移动、删除 |
Nextcloud URL、用户名、应用密码 |
@弗雷迪·舒茨 |
| NocoDB CRM |
管理NocoDB表和记录:列表基、表、带过滤和排序的CRUD |
NocoDB URL、API令牌 |
@弗雷迪·舒茨 |
| 概念 |
搜索、阅读和创建支持markdown内容的Notion页面 |
Notion Integration Token |
@弗雷迪·舒茨 |
| 待办清单 |
管理任务:列出、创建、完成、组织到期日期和优先级 |
Todoist API代币 |
@弗雷迪·舒茨 |
| 维昆亚 |
管理任务和项目:列出、创建、更新、删除到期日期和优先级 |
Vikunja URL,API令牌 |
@弗雷迪·舒茨 |
新闻
参考
运输
公用事业
天气
用法
技能是通过与您的n8n爪代理聊天来管理的:
"What skills are available?" → lists all skills
"Install weather-openmeteo" → installs the skill
"Remove weather-openmeteo" → uninstalls and cleans up
使用API键的技能
某些技能需要API证书。当你安装一个时,代理会向你发送一个 安全一次性链接 (10分钟有效)通过HTTPS表单输入您的API密钥。您的密钥在聊天中永远不可见。
"Install news-newsapi" → installs + sends credential link
"Add credential for news-newsapi" → generates a new credential link
⚠️ 安全通知——技能证书以纯文本形式存储
通过凭证表单输入的API密钥当前已存储 未加密 在 template_credentials PostgreSQL中的表。这意味着:
- 任何有权访问数据库的人都可以读取所有存储的API密钥
- Supabase工作室(
localhost:3001,可通过SSH隧道访问)以纯文本显示凭据
- 泄露的VPS会暴露所有存储的API密钥
攻击者需要什么: 数据库和API都无法通过互联网访问。PostgREST仅在Docker内部网络上运行,PostgreSQL(端口5432)绑定到 127.0.0.1。要读取凭据,攻击者需要SSH访问您的VPS——没有远程网络路径。
缓解措施: 安全的SSH访问(基于密钥的身份验证,无根密码,fail2ban),并尽可能使用权限最小的API密钥。
技能证书的静态加密已计划并正在进行中。
满足基础设施要求的技能
一些技能需要与n8n一起运行的其他服务:
| 技能 |
需要 |
email-imap-smtp |
email-bridge docker-compose.yml中的服务(自v0.10起包含在n8n claw中) |
技能类型
| 类型 |
描述 |
native |
n8n直接实现工具逻辑(HTTP请求、代码节点) |
bridge |
n8n将请求代理到外部MCP服务器(尚不支持) |
创建模板
目录结构
每个模板都位于其自己的目录中 templates/:
templates/
index.json ← catalog (add your template here)
my-template/
manifest.json ← metadata (name, tools, credentials)
workflow.json ← n8n workflow bundle (two workflows)
README.md ← optional: usage notes
步骤1:添加到 index.json
向添加条目 templates 数组输入 templates/index.json:
{
"id": "my-template",
"name": "My Template",
"type": "native",
"category": "utilities",
"description": "Short description of what this template does",
"credentials_required": [],
"version": "1.0.0"
}
第二步:创建 manifest.json
{
"id": "my-template",
"name": "My Template",
"version": "1.0.0",
"updated": "2026-03-08",
"type": "native",
"category": "utilities",
"description": "Short description of what this template does",
"credentials_required": [],
"credentials_optional": [
{
"key": "some_api_key",
"label": "Some API Key",
"hint": "Only needed for premium features"
}
],
"tools": [
{
"name": "my_tool",
"description": "What this tool does"
}
],
"author": "your-github-username",
"license": "MIT",
"tested_n8n_version": "2.10.4"
}
清单字段
| 字段 |
必填 |
描述 |
id |
yes |
唯一模板ID(小写,仅限连字符) |
name |
yes |
显示名称 |
version |
是 |
学期版本(例如。 1.0.0) |
updated |
是 |
上次更新日期(ISO格式,例如。 2026-03-08) |
type |
是的 |
native 或 bridge |
category |
yes |
筛选类别(例如。 weather, utilities, data) |
description |
是 |
简短描述 |
credentials_required |
yes |
需要凭据密钥数组(如果没有,则为空数组) |
credentials_optional |
no |
带提示的可选凭据数组 |
tools |
yes |
此模板提供的工具数组(name + description) |
author |
是 |
GitHub用户名 |
license |
yes |
许可证标识符(例如。 MIT) |
tested_n8n_version |
是 |
测试的是n8n版本 |
步骤3:创建 workflow.json
工作流包使用 n8n-claw-template 格式。每个模板由以下部分组成 两个工作流:
- 子工作流程 (
sub)--包含实际的工具逻辑(代码节点)
- 服务器工作流 (
server)--公开该工具的MCP服务器(mcpTrigger+toolWorkflow)
这两种工作流程模式是必需的,因为n8n的API忽略 specifyInputSchema 创建工作流时,因此 toolCode 参数不起作用 toolWorkflow 模式避免了这个bug。
{
"format": "n8n-claw-template",
"format_version": 1,
"sub": {
"name": "MCP Sub: My Template",
"settings": {
"executionOrder": "v1",
"callerPolicy": "workflowsFromSameOwner"
},
"nodes": [
{
"id": "sub-trigger",
"name": "Execute Workflow Trigger",
"type": "n8n-nodes-base.executeWorkflowTrigger",
"typeVersion": 1.1,
"position": [0, 0],
"parameters": { "inputSource": "passthrough" }
},
{
"id": "sub-code",
"name": "My Tool Logic",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [256, 0],
"parameters": {
"jsCode": "const input = $input.first().json;\nconst city = input.city || 'Berlin';\n\n// Make HTTP requests with helpers.httpRequest()\nconst data = await helpers.httpRequest({\n method: 'GET',\n url: 'https://api.example.com/data?q=' + encodeURIComponent(city)\n});\n\nreturn [{ json: { result: data } }];"
}
}
],
"connections": {
"Execute Workflow Trigger": {
"main": [[{ "node": "My Tool Logic", "type": "main", "index": 0 }]]
}
}
},
"server": {
"name": "MCP: My Template",
"settings": { "executionOrder": "v1" },
"nodes": [
{
"id": "mcp-trigger",
"name": "MCP Server Trigger",
"type": "@n8n/n8n-nodes-langchain.mcpTrigger",
"typeVersion": 2,
"position": [0, 0],
"parameters": { "path": "my-template" }
},
{
"id": "tool-wf",
"name": "my_tool",
"type": "@n8n/n8n-nodes-langchain.toolWorkflow",
"typeVersion": 2.2,
"position": [0, 300],
"parameters": {
"name": "my_tool",
"description": "What this tool does. Parameter: city (city name)",
"workflowId": {
"__rl": true,
"value": "REPLACE_SUB_WORKFLOW_ID",
"mode": "id"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {
"city": "={{ $fromAI('city', 'The city name', 'string') }}"
},
"matchingColumns": [],
"schema": [
{
"id": "city",
"displayName": "city",
"type": "string",
"description": "The city name",
"required": true
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
}
}
}
],
"connections": {
"my_tool": {
"ai_tool": [[{ "node": "MCP Server Trigger", "type": "ai_tool", "index": 0 }]]
}
}
}
}
要点
| 主题 |
详细信息 |
| HTTP请求 |
使用 helpers.httpRequest() 在代码节点中-- 不 $helpers.httpRequest() (代码节点v2中未定义) |
| 子工作流ID |
使用 REPLACE_SUB_WORKFLOW_ID 作为占位符--库管理器在安装过程中会自动修补此占位符 |
| 数据库访问 |
读取凭据使用的模板 {{SUPABASE_URL}} 和 {{SUPABASE_SERVICE_KEY}} 占位符--在安装过程中自动替换 |
| MCP路径 |
The path 在mcpTrigger中应与您的模板ID匹配 |
| 参数 |
工具参数通过以下方式到达子工作流程 $input.first().json.paramName |
$fromAI() |
在服务器工作流中用于告诉AI代理从用户消息中提取哪些参数 |
| 连接 |
toolWorkflow通过以下方式连接到mcpTrigger ai_tool,不 main |
测试您的模板
在提交pull请求之前,请在本地测试您的模板:
- 验证JSON --确保
manifest.json 和 workflow.json 是有效的JSON
- 手动导入 -通过API或UI将子工作流和服务器工作流导入n8n实例
- 测试MCP服务器 --通过n8n claw代理或直接通过MCP客户端调用该工具
- 检查响应 --验证该工具是否以预期格式返回有用数据
您还可以通过库管理器测试是否将模板推送到分支并在库管理器工作流中临时更改CDN_BASE URL。
贡献
- 分叉此存储库
- 在下面创建一个目录
templates/ 使用您的模板ID
- 添加
manifest.json 和 workflow.json (见上文)
- 向添加条目
templates/index.json
- 提交拉取请求
PR 检查清单
- []模板ID仅使用连字符小写(例如。
my-api-tool)
- [ ]
manifest.json 包含所有必填字段
- [ ]
workflow.json 用途 n8n-claw-template 格式与 sub 和 server
- [ ]
REPLACE_SUB_WORKFLOW_ID 用作工作流ID占位符
- []代码使用
helpers.httpRequest() (不是 $helpers)
- [ ]
index.json 条目与清单数据匹配
- []在实时n8n实例上测试的模板
- []所有文本均为英文
内容分发网络
模板通过jsDelivr CDN提供,以实现快速、可靠的交付:
https://cdn.jsdelivr.net/gh/freddy-schuetz/n8n-claw-templates@master/templates/index.json
https://cdn.jsdelivr.net/gh/freddy-schuetz/n8n-claw-templates@master/templates/{id}/manifest.json
https://cdn.jsdelivr.net/gh/freddy-schuetz/n8n-claw-templates@master/templates/{id}/workflow.json
CDN使用 @master 分支引用。推送更改后,缓存更新可能需要几分钟时间。有关模板文件的参考,请参见 templates/TEMPLATE_EXAMPLE.md.
许可证
麻省理工学院