Memos Skill
管理你的 Memos 备忘录实例,支持完整的备忘录生命周期操作。
配置
在使用 memos API 之前,需要创建配置文件。
配置文件位置
在 skill 目录下创建 config.json 文件:
CODEBLOCK0
配置文件格式
CODEBLOCK1
配置说明
| 字段 | 类型 | 必填 | 说明 |
|---|
| INLINECODE1 | string | 是 | 你的 memos 实例地址,如 INLINECODE2 |
| INLINECODE3 |
string | 是 | 个人访问令牌 |
|
default_page_size | number | 否 | 默认分页大小(默认10) |
|
default_visibility | string | 否 | 默认可见性(
PRIVATE,
PROTECTED,
PUBLIC) |
获取访问令牌
- 1. 登录你的 memos 实例
- 进入 Settings → Tokens
- 点击 "Create Token"
- 复制生成的令牌并填入 config.json
在 JavaScript 中读取配置
CODEBLOCK2
执行策略
处理任何 memos 相关请求时,默认遵循下面的实现方式:
- 1. 使用 Node.js 读取
config.json,拿到 instance_url 和 INLINECODE11 - 使用
curl 调用 memos API 完成查询、创建、更新、删除、上传附件等操作 - 除非用户明确要求,否则不要改用 Python、
requests、axios 或其他 SDK
标准执行流程
1. 用 Node.js 读取配置
CODEBLOCK3
2. 用 curl 调用 memos API
CODEBLOCK4
操作要求
- - 读取配置时,优先使用 Node.js 脚本而不是 shell 文本解析
- 对 memos 的增删改查操作,优先输出或执行
curl 命令 - 更新操作时,要显式带上
PATCH 和 INLINECODE16 - 搜索、列表、详情、评论、反应、附件等请求,也保持
curl 风格一致 - 如果要给用户展示“将如何执行”,优先展示 Node 读取配置 +
curl 请求两步
核心功能
1. Memo 管理
创建备忘录
- - 端点: POST INLINECODE19
- 关键字段:
-
content: 备忘录内容(支持 Markdown)
-
visibility: 可见性(
PRIVATE,
PROTECTED,
PUBLIC)
-
tags: 标签数组
-
resources: 关联资源
示例:
CODEBLOCK5
获取备忘录列表
- - 端点: GET INLINECODE27
- 参数:
-
pageSize: 每页数量(默认 10)
-
pageToken: 分页令牌
-
filter: 过滤条件(遵循 Google AIP-160 标准)
-
creator == "users/1": 按创建者过滤
-
row_status == "NORMAL": 正常状态的备忘录
-
create_time > "2024-01-01": 按创建时间过滤
-
tag == "work": 按标签过滤
-
content.contains("关键词"): 内容搜索
-
sort: 排序方式(
createTime,
updateTime)
获取单个备忘录
- - 端点: GET INLINECODE39
- 返回完整的备忘录详情,包括内容、标签、评论等
更新备忘录
- - 端点: PATCH INLINECODE40
- 使用
updateMask 指定要更新的字段,如 INLINECODE42
删除备忘录
- - 端点: DELETE INLINECODE43
2. 搜索与过滤
使用 Google AIP-160 过滤语法进行高级搜索:
CODEBLOCK6
3. 评论与反应
添加评论
获取评论列表
添加反应(表情)
- - 端点: POST INLINECODE46
- 支持的表情:
THUMBS_UP, THUMBS_DOWN, HEART, FIRE, ROCKET, EYES, THINKING, CLAPPING, PARTY, INLINECODE56
4. 附件管理
上传附件
- - 端点: POST INLINECODE57
- 支持 multipart/form-data 上传文件
获取附件列表
将附件关联到备忘录
- - 端点: POST INLINECODE59
- 请求体: INLINECODE60
5. 关联备忘录
创建关联
- - 端点: POST INLINECODE61
- 关联类型:
REFERENCE, INLINECODE63
6. 用户管理
获取当前用户
创建个人访问令牌
- - 端点: POST INLINECODE65
- 返回的
token 只在创建时显示一次
API 请求格式
认证头
CODEBLOCK7
标准响应格式
CODEBLOCK8
错误响应
CODEBLOCK9
使用场景示例
场景 1: 快速记录想法
用户说:"帮我记录一条备忘录,内容是今天和客户的会议要点..."
CODEBLOCK10
场景 2: 搜索备忘录
用户说:"搜索我上个月关于项目的备忘录"
CODEBLOCK11
场景 3: 批量整理
用户说:"把标签为'temp'的所有备忘录改成'archive'"
CODEBLOCK12
场景 4: 带附件的备忘录
用户说:"创建一个备忘录并附上这张图片"
CODEBLOCK13
场景 5: 配置 memos 实例
用户说:"把我的 memos 实例配置为 https://memo.example.com,token 是 abc123"
处理步骤:
- 1. 检查是否存在
config.json 文件 - 如果存在,询问用户是否覆盖现有配置
- 创建或更新配置文件:
CODEBLOCK14
- 4. 验证配置(可选:发送测试请求)
- 返回配置成功的确认信息
代码示例:
CODEBLOCK15
输出格式建议
根据用户需求,灵活返回以下格式:
- 1. 简要摘要: 返回备忘录标题/ID、创建时间、标签列表
- 完整内容: 返回完整内容(包括 Markdown 渲染)
- 表格形式: 多条备忘录时用表格展示 ID、内容预览、时间、标签
- JSON 格式: 用户需要编程处理时返回原始 JSON
最佳实践
- 1. 内容格式: 鼓励使用 Markdown 格式编写备忘录内容
- 标签管理: 建议使用统一的标签命名规范(小写、用连字符连接)
- 可见性设置: 默认为 PRIVATE,分享时才设为 PUBLIC
- 分页处理: 列表查询时注意处理分页,避免一次返回过多数据
- 错误处理: API 可能返回 401(未授权)、404(不存在)、400(参数错误)等状态码
注意事项
- - 备忘录 ID 格式为
memos/{id},如 INLINECODE69 - 用户 ID 格式为
users/{id},如 INLINECODE71 - 附件 ID 格式为 INLINECODE72
- 创建时间字段是 ISO 8601 格式,如 INLINECODE73
- 更新操作使用 PATCH,需要指定 updateMask 避免覆盖其他字段
Memos 技能
管理你的 Memos 备忘录实例,支持完整的备忘录生命周期操作。
配置
在使用 memos API 之前,需要创建配置文件。
配置文件位置
在 skill 目录下创建 config.json 文件:
memos-skill/
├── SKILL.md
├── config.json # 配置文件
└── ...
配置文件格式
json
{
instance_url: https://your-memos-instance.com,
access_token: your-access-token,
defaultpagesize: 10,
default_visibility: PRIVATE
}
配置说明
| 字段 | 类型 | 必填 | 说明 |
|---|
| instanceurl | string | 是 | 你的 memos 实例地址,如 https://memo.example.com |
| accesstoken |
string | 是 | 个人访问令牌 |
| default
pagesize | number | 否 | 默认分页大小(默认10) |
| default_visibility | string | 否 | 默认可见性(PRIVATE, PROTECTED, PUBLIC) |
获取访问令牌
- 1. 登录你的 memos 实例
- 进入 Settings → Tokens
- 点击 Create Token
- 复制生成的令牌并填入 config.json
在 JavaScript 中读取配置
js
import fs from node:fs;
import path from node:path;
import { fileURLToPath } from node:url;
const filename = fileURLToPath(import.meta.url);
const dirname = path.dirname(filename);
// 获取 skill 目录路径
const skillDir = dirname;
const configPath = path.join(skillDir, config.json);
// 读取配置
const config = JSON.parse(fs.readFileSync(configPath, utf8));
const instanceUrl = config.instance_url;
const accessToken = config.access_token;
const headers = {
Authorization: Bearer ${accessToken},
Content-Type: application/json,
};
执行策略
处理任何 memos 相关请求时,默认遵循下面的实现方式:
- 1. 使用 Node.js 读取 config.json,拿到 instanceurl 和 access_token
- 使用 curl 调用 memos API 完成查询、创建、更新、删除、上传附件等操作
- 除非用户明确要求,否则不要改用 Python、requests、axios 或其他 SDK
标准执行流程
1. 用 Node.js 读取配置
js
import fs from node:fs;
import path from node:path;
import { fileURLToPath } from node:url;
const filename = fileURLToPath(import.meta.url);
const dirname = path.dirname(filename);
const configPath = path.join(dirname, config.json);
const config = JSON.parse(fs.readFileSync(configPath, utf8));
const instanceUrl = config.instance_url;
const accessToken = config.access_token;
2. 用 curl 调用 memos API
bash
curl -X POST \
-H Authorization: Bearer $MEMOS_TOKEN \
-H Content-Type: application/json \
-d {content:测试内容,tags:[test]} \
$MEMOS_URL/api/v1/memos
操作要求
- - 读取配置时,优先使用 Node.js 脚本而不是 shell 文本解析
- 对 memos 的增删改查操作,优先输出或执行 curl 命令
- 更新操作时,要显式带上 PATCH 和 updateMask
- 搜索、列表、详情、评论、反应、附件等请求,也保持 curl 风格一致
- 如果要给用户展示将如何执行,优先展示 Node 读取配置 + curl 请求两步
核心功能
1. Memo 管理
创建备忘录
- - 端点: POST /api/v1/memos
- 关键字段:
- content: 备忘录内容(支持 Markdown)
- visibility: 可见性(PRIVATE, PROTECTED, PUBLIC)
- tags: 标签数组
- resources: 关联资源
示例:
json
{
content: 今天要完成的任务:\n- 完成项目文档\n- 回复客户邮件,
visibility: PRIVATE,
tags: [todo, work]
}
获取备忘录列表
- - 端点: GET /api/v1/memos
- 参数:
- pageSize: 每页数量(默认 10)
- pageToken: 分页令牌
- filter: 过滤条件(遵循 Google AIP-160 标准)
- creator == users/1: 按创建者过滤
- row_status == NORMAL: 正常状态的备忘录
- create_time > 2024-01-01: 按创建时间过滤
- tag == work: 按标签过滤
- content.contains(关键词): 内容搜索
- sort: 排序方式(createTime, updateTime)
获取单个备忘录
- - 端点: GET /api/v1/memos/{memo}
- 返回完整的备忘录详情,包括内容、标签、评论等
更新备忘录
- - 端点: PATCH /api/v1/memos/{memo}
- 使用 updateMask 指定要更新的字段,如 content,visibility,tags
删除备忘录
- - 端点: DELETE /api/v1/memos/{memo}
2. 搜索与过滤
使用 Google AIP-160 过滤语法进行高级搜索:
组合条件
content.contains(项目) AND tag == work
按时间范围
create
time > 2024-01-01 AND createtime < 2024-12-31
多标签查询
tag == work OR tag == personal
排除条件
NOT tag == archive
完整示例
filter: creator == \users/1\ AND (tag == \work\ OR tag == \urgent\) AND create_time > \2024-01-01\
3. 评论与反应
添加评论
- - 端点: POST /api/v1/memos/{memo}/comments
获取评论列表
- - 端点: GET /api/v1/memos/{memo}/comments
添加反应(表情)
- - 端点: POST /api/v1/memos/{memo}/reactions
- 支持的表情:THUMBSUP, THUMBSDOWN, HEART, FIRE, ROCKET, EYES, THINKING, CLAPPING, PARTY, ROCKET
4. 附件管理
上传附件
- - 端点: POST /api/v1/attachments
- 支持 multipart/form-data 上传文件
获取附件列表
- - 端点: GET /api/v1/attachments
将附件关联到备忘录
- - 端点: POST /api/v1/memos/{memo}/attachments
- 请求体:{attachmentIds: [attachments/1, attachments/2]}
5. 关联备忘录
创建关联
- - 端点: POST /api/v1/memos/{memo}/relations
- 关联类型:REFERENCE, COMMENT
6. 用户管理
获取当前用户
- - 端点: GET /api/v1/auth/status
创建个人访问令牌
- - 端点: POST /api/v1/users/{user}/personalAccessTokens
- 返回的 token 只在创建时显示一次
API 请求格式
认证头
Authorization: Bearer ACCESSTOKEN>
标准响应格式
json
{
code: 0,
message: success,
data: { ... }
}
错误响应
json
{
code: 3,
message: Invalid argument,
details: []
}
使用场景示例
场景 1: 快速记录想法
用户说:帮我记录一条备忘录,内容是今天和客户的会议要点...
http
POST /api/v1/memos
{
content: 今天和客户的会议要点:\n1. 确认交付时间...,
visibility: PRIVATE,
tags: [meeting, client]
}
场景 2: 搜索备忘录
用户说:搜索我上个月关于项目的备忘录
http
GET /api/v1/memos?filter=content.contains(项目) AND