用于扩展Amazon Q CLI,提供AI辅助的书签管理功能的工具。
<p align="center"> <img src="./img/logo.png" alt="LinkVault Logo" width="100%"> </p>LinkVault 是一个与Amazon Q CLI集成的MCP(模型上下文协议)服务器,通过自然语言提供智能书签管理功能。它允许您在终端中使用对话命令来访问、组织和搜索您的书签。
pip install -r requirements.txt
chmod +x main.py src/url_manager.py src/server.py
要使用LinkVault与Amazon Q CLI,需要将其注册为MCP服务器:
编辑MCP配置文件:
nano ~/.aws/amazonq/mcp.json
添加书签管理器配置:
"bookmark_manager": {
"command": "uv",
"args": ["--directory", "/path/to/linkvault-mcp-server", "run", "src/server.py"],
"env": {},
"disabled": false,
"autoApprove": ["get_url_data", "store_url", "search_bookmarks", "list_categories", "list_bookmarks_by_category", "delete_bookmark", "list_chrome_bookmarks", "import_chrome_bookmark"]
}
将/path/to/linkvault-mcp-server替换为您实际的安装目录路径。
保存文件并重新启动Amazon Q CLI(如果正在运行)。
LinkVault 使用模型上下文协议扩展Amazon Q CLI,增加书签管理功能:
graph TD
User[用户] -->|自然语言| AQ[Amazon Q CLI]
AQ -->|MCP协议| MCP[LinkVault MCP服务器]
MCP -->|SQLite存储| SQL[(SQLite数据库)]
MCP -->|提取内容| Web[网页]
MCP -->|读取书签| Chrome[Chrome用户]
subgraph LinkVault
MCP
end
sequenceDiagram
participant 用户
participant AQ as Amazon Q CLI
participant MCP as LinkVault MCP服务器
participant Web as 网页
participant DB as SQLite数据库
participant Chrome as Chrome书签
用户->>AQ: "保存这篇文章:https://example.com"
AQ->>MCP: get_url_data(url)
MCP->>Web: 获取内容
Web-->>MCP: HTML内容
MCP-->>AQ: URL元数据
AQ->>用户: "我找到了一篇关于X的文章。保存吗?"
用户->>AQ: "是的,保存它"
AQ->>MCP: store_url(metadata)
MCP->>DB: 存储书签
DB-->>MCP: 成功
MCP-->>AQ: 成功响应
AQ->>用户: "书签已保存!"
用户->>AQ: "显示我的Chrome书签"
AQ->>MCP: list_chrome_bookmarks()
MCP->>Chrome: 读取书签
Chrome-->>MCP: 书签数据
MCP-->>AQ: Chrome书签
AQ->>用户: "这里是您的Chrome书签..."
LinkVault可以访问系统上所有Chrome用户的书签:
flowchart TD
start[开始] --> findProfiles[查找Chrome用户]
findProfiles --> profileCheck{找到用户?}
profileCheck -->|否| returnEmpty[返回空列表]
profileCheck -->|是| loopProfiles[处理每个用户]
loopProfiles --> parseBookmarks[解析书签文件]
parseBookmarks --> extractData[提取书签数据]
extractData --> addProfileInfo[添加用户信息]
addProfileInfo --> combineResults[合并结果]
combineResults --> filterCheck{按文件夹过滤?}
filterCheck -->|是| applyFilter[应用文件夹过滤]
filterCheck -->|否| returnAll[返回所有书签]
applyFilter --> returnFiltered[返回过滤后的书签]
returnEmpty --> endNode[结束]
returnAll --> endNode
returnFiltered --> endNode
$ q chat
欢迎来到Amazon Q CLI!
> 保存这篇文章:https://docs.aws.amazon.com/lambda/latest/dg/lambda-urls.html
我将为您分析这篇文章。稍等片刻...
我已经分析了这篇文章,看起来它是关于AWS Lambda函数URL的。
您希望我用以下详情保存它吗?
- 分类:无服务器
- 标签:lambda, api, function-urls, http-endpoints
- 描述:如何创建和配置函数URL以提供Lambda函数的专用HTTP(S)端点的文档。
- 重要性:4(高)
> 是的,这看起来不错
太好了!我已经将文章保存到您的书签中。
> 显示我关于AWS的Chrome书签
我将检查您的Chrome书签中的AWS相关内容。
在您的Chrome用户中发现了12个与AWS相关的书签:
1. AWS管理控制台
URL: https://console.aws.amazon.com/
用户:工作/书签栏
2. Amazon EC2文档
URL: https://docs.aws.amazon.com/ec2/
用户:工作/AWS文档
[...更多结果...]
您希望我将其中任何一个导入到您的LinkVault收藏中吗?
> 导入第一个到我的AWS分类
我已经将"AWS管理控制台"导入到您的AWS分类中,并带有标签:aws, 控制台, 管理。
def get_url_data(url: str) -> Dict[str, Any]:
"""
从URL获取并提取数据。
参数:
url: 要获取和分析的URL
返回:
包含从URL提取的数据的字典
"""
def store_url(url: str, title: str, category: str,
tags: List[str], description: str,
importance: int, notes: str = None) -> Dict[str, Any]:
"""
存储带有AI生成元数据的URL。
参数:
url: 要存储的URL
title: 网页标题
category: 要分配的分类
tags: 与URL关联的标签列表
description: 内容的简短描述
importance: 重要性评分(1-5)
notes: 关于URL的可选附加笔记或评论
返回:
表明成功或失败的字典
"""
def search_bookmarks(query: str) -> Dict[str, Any]:
"""
通过查询搜索书签。
参数:
query: 搜索查询
返回:
包含搜索结果的字典
"""
def list_categories() -> Dict[str, Any]:
"""
列出所有书签分类。
返回:
包含所有分类及其数量的字典
"""
def list_bookmarks_by_category(category: str)
"""
列出特定分类中的所有书签。
参数:
category: 分类名称
返回:
包含指定分类中书签的字典
"""
def delete_bookmark(url: str, category: str = None) -> Dict[str, Any]:
"""
从数据库中删除书签。
参数:
url: 要删除的书签URL
category: 可选分类,指定要删除哪个书签,如果相同的URL存在于多个分类中
返回:
表明成功或失败以及有关已删除书签的详细信息的字典
"""
def list_chrome_bookmarks(folder: str = None) -> Dict[str, Any]:
"""
列出Chrome书签,可选地按文件夹过滤。
参数:
folder: 可选文件夹路径,用于过滤书签
返回:
包含Chrome书签的字典
"""
def import_chrome_bookmark(url: str, title: str, category: str,
tags: List[str], description: str = "",
importance: int = 3, notes: str = None) -> Dict[str, Any]:
"""
将Chrome书签导入数据库。
参数:
url: 要导入的Chrome书签URL
title: 书签标题
category: 要分配的分类
tags: 与URL关联的标签列表
description: 内容的简短描述
importance: 重要性评分(1-5)
notes: 关于URL的可选附加笔记或评论
返回:
表明成功或失败的字典
"""
LinkVault将书签存储在位于~/Documents/github/linkvault-mcp-server/data/bookmarks.db的SQLite数据库中。
linkvault-mcp-server/
├── src/ # 源代码目录
│ ├── __init__.py # 包初始化
│ ├── server.py # MCP服务器实现
│ ├── url_manager.py # CLI实现
│ └── utils/ # 工具函数
│ ├── __init__.py
│ └── browser_integration.py # 浏览器集成工具
├── data/ # 数据库存储
├── main.py # 主入口点
├── README.md # 本文件
├── CHANGELOG.md # 版本历史
└── pyproject.toml # 项目依赖项
除了与Amazon Q CLI集成之外,LinkVault还提供了独立的CLI界面,用于直接管理书签。
./main.py --mode cli
或者直接:
./src/url_manager.py <命令> [选项]
add <url> <分类> [-t 标签] [-n 注释] [--title 自定义标题]categorieslist <分类>search <查询>tagstag <标签>delete <url> [-c 分类]rename <旧名称> <新名称>delcat <分类>chrome [-f 文件夹]import <url> <分类> [-t 标签] [--title 标题]CLI模式使用位于~/Documents/github/linkvault-mcp-server/data/url_database.json的JSON文件进行存储。
MIT许可证