Linkwarden MCP について
Linkwarden MCPはMCPクライアントをLinkwardenのブックマークライブラリに接続し、自然言語での検索や整理を可能にします。既定では読み取り専用で、書き込みと削除は個別のスコープ設定で有効にします。
主な機能
- 01ブックマーク、コレクション、タグの検索
- 02保存済み・アーカイブ済みページの読み取り
- 03既定で読み取り専用
- 04スコープ指定による書き込みツールの有効化
- 05個別スコープによる削除・統合ツール
- 06ブックマークのトリアージと整理ワークフロー
活用シーン
- 01トピック別に保存済みブックマークを検索
- 02コレクションやタグ内の項目を確認
- 03書き込みスコープを有効にしてリンクを保存・整理
- 04削除スコープを有効にしてリンクやタグを整理
MCP 対応
LinkwardenのHTTP APIに接続し、stdio経由でブックマーク、コレクション、タグの操作を提供します。書き込みと削除のツールは、それぞれのスコープが設定された場合にのみ登録されます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx linkwarden-mcpLINKWARDEN_API_URLLinkwarden instance base URL (no /api/v1 suffix)LINKWARDEN_API_KEYシークレットAccess token from Linkwarden settings (Authorization: Bearer)LINKWARDEN_MCP_WRITE_SCOPESComma-separated write scopes: links,collections,tags,raw. Empty = read-only.LINKWARDEN_MCP_DELETE_SCOPESComma-separated delete scopes (never implied by write scopes)ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
linkwarden-mcp
セルフホスト型 Linkwarden 用の MCP サーバーです。ブックマーク、コレクション、タグについて AI に質問できます。
Linkwarden とは?
Linkwarden は、セルフホスト可能なオープンソースのブックマークマネージャーです。ウェブページを 1 か所に収集、整理、注釈付けして保存できます。ページ全体のアーカイブを作成するため、元のページが消えた後もコンテンツを読み続けられます。共同作業や公開共有にも対応しています。
このプロジェクトは、Linkwarden の HTTP API を Model Context Protocol に接続します。これにより、Cursor、Claude、VS Code Copilot などの MCP ホストから、自然言語で最新のライブラリを検索できます。
Linkwarden の便利なリンク:
このサーバーの機能
デフォルトは読み取り専用です。利用できる機能は次のとおりです。
- 読み取りツール 18 個 - 検出(
list_resources)、6 つのコア読み取り機能(検索、取得、保存済みコンテンツ、コレクション、タグ、概要)、および 11 個のトリアージ/整理ワークフロー - タスクツール(オプトイン) -
save_link、smart_save_link、organise_links、create_collection、apply_triage_planなど、意図に応じた書き込み機能(一致する書き込みスコープが設定されている場合に登録) - 削除ツール(オプトイン) -
delete_links、delete_tags、merge_tags、delete_collection(削除スコープが設定されている場合にのみ登録。書き込みスコープから暗黙に有効になることはありません) - 厳格な拒否リスト - トークン、セッション、認証、ユーザー管理(
GET /api/v1/users/meを除く)、移行、インスタンス全体の保存は、書き込み機能が有効な場合もブロックされます
トランスポートはstdioです。HTTP サーバーはありません。uv/uvx を使う場合、グローバルインストールは不要です。
ブランディング/アイコン
4 つの場所で使用します(ロゴを変更する場合は、すべてを同期してください)。
- stdio ホスト(
mcp.json経由の Cursor、Claude Desktop):server_icons()のserverInfo.icons—src/linkwarden_mcp/assets/icon.pngの埋め込みデータ URI と HTTPS フォールバックdocs/icon-512.png(https://raw.githubusercontent.com/flumpiey/linkwarden-mcp/main/docs/icon-512.png)。website_urlはhttps://linkwarden.app/です。 - Cursor プラグイン:
.cursor-plugin/plugin.jsonのlogo→docs/linkwarden-icon.svg。 - Claude Desktop Extension:
mcpb/icon.png(npx @anthropic-ai/mcpb pack mcpbでパッケージ化)。 - Claude.ai のリモートコネクター: Claude.ai は
serverInfo.iconsを無視し、コネクター URL のルートドメインのファビコンを使用します。後でリモート MCP をホストする場合は、登録可能なドメインのルートでdocs/favicon.icoを配信してください(例:https://mcp.acme.com/...の場合はhttps://acme.com/favicon.ico)。
server.json のレジストリメタデータでも、icons[0].src は同じ raw の docs/icon-512.png URL を参照しています。
必要条件
- Python ≥ 3.10(
uvxが自動的にインストールします) - uv(
uvxを提供) - 接続可能な Linkwarden インスタンス:
LINKWARDEN_API_URL+LINKWARDEN_API_KEY
アクセストークン
- Linkwarden インスタンス(セルフホストまたは Cloud)にサインインします。
- Settings → Access Tokens を開きます(または
/settings/access-tokensに移動します)。 - New Access Token を作成して名前を付け、値をコピーして
LINKWARDEN_API_KEYに設定します。 LINKWARDEN_API_URLにインスタンスのベース URL を設定します(通常は/api/v1を付けません。デプロイ環境で必要な場合にのみ/api/v1を含めます)。例:https://links.example.comまたはローカル Docker のhttp://127.0.0.1:3000。
linkwarden-mcp はトークンを Authorization: Bearer … として送信します。API の概要:API Introduction。
ローカルで実行する場合は .env.example を .env にコピーしてください。.env は絶対にコミットしないでください。認証情報の設定には Cursor プラグインの Configure UI、または本番環境ではシークレットマネージャーを使用してください。
クイックスタート
uvx linkwarden-mcp
以下のクライアント設定を貼り付け、LINKWARDEN_API_URL / LINKWARDEN_API_KEY を設定してホストを再起動し、次のように質問します:「Python に関する未読のブックマークを探して」、または 「Dev コレクションには何がある?」
Git クローンから実行する場合(開発用):uvx --from git+https://github.com/flumpiey/linkwarden-mcp linkwarden-mcp または uv run --directory /path/to/linkwarden-mcp linkwarden-mcp。
インストール
以下の設定は PyPI から linkwarden-mcp を取得します。読み取り専用で使用する場合は、書き込みスコープの環境変数を設定しないでください。
Cursor
プラグイン(URL、キー、スコープは Configure UI で設定): このリポジトリは .cursor-plugin/plugin.json とルートの mcp.json を使った Cursor プラグインです。
- クローンを
~/.cursor/plugins/local/linkwarden-mcpにシンボリックリンクするか、コピーします(Windows の場合:%USERPROFILE%\.cursor\plugins\local\linkwarden-mcp)。- macOS / Linux:
ln -s /path/to/linkwarden-mcp ~/.cursor/plugins/local/linkwarden-mcp - Windows: Cursor はローカルプラグインのシンボリックリンクをたどりません。代わりにジャンクションを作成するか、コピーしてください:
または:mklink /J "%USERPROFILE%\.cursor\plugins\local\linkwarden-mcp" "E:\Development\linkwarden-mcp"robocopy "E:\Development\linkwarden-mcp" "%USERPROFILE%\.cursor\plugins\local\linkwarden-mcp" /E
- macOS / Linux:
- ウィンドウを再読み込みします。
linkwarden-mcpの Plugins → Configure を開きます。Linkwarden API URL と Linkwarden API key を設定します。読み取り専用で使用する場合は Write scopes / Delete scopes を空欄のままにするか、links,collectionsのような CSV を貼り付けます。- Customize / MCP で
linkwardenMCP サーバーが有効になっていることを確認します。
マーケットプレイスへの掲載は、cursor.com/marketplace/publish で別途申請してください。
手動で mcp.json を設定する場合: プロジェクトの .cursor/mcp.json またはユーザー共通の ~/.cursor/mcp.json を使用します。ルートの mcp.json は ${…} プレースホルダーのみを含むプラグイン設定用ファイルです。実際のシークレットは絶対にコミットしないでください。
PyPI から:
{
"mcpServers": {
"linkwarden": {
"type": "stdio",
"command": "uvx",
"args": ["linkwarden-mcp"],
"env": {
"LINKWARDEN_API_URL": "https://links.example.com",
"LINKWARDEN_API_KEY": "your-token"
}
}
}
}
ローカルで編集可能な状態で実行(開発用):
{
"mcpServers": {
"linkwarden": {
"type": "stdio",
"command": "uv",
"args": ["run", "--directory", "/path/to/linkwarden-mcp", "linkwarden-mcp"],
"env": {
"LINKWARDEN_API_URL": "https://links.example.com",
"LINKWARDEN_API_KEY": "your-token"
}
}
}
}
env ブロックで書き込みスコープを任意に指定できます:
"LINKWARDEN_MCP_WRITE_SCOPES": "links,collections",
"LINKWARDEN_MCP_DELETE_SCOPES": "links"
保存後に Cursor を再起動します。MCP の設定で linkwarden を確認してください。
Claude Desktop
デスクトップ拡張機能(.mcpb): GitHub Releases から mcpb.mcpb をダウンロードします。v0.1.5+ を使用してください(PATH 上に uv が必要です)。起動コマンドは uv tool run --python 3.12 linkwarden-mcp です。PyPI パッケージを mcpb/pyproject.toml の依存関係に追加しないでください。インストール時に Claude Desktop がこのファイルを同期するため、システムの Python 3.13 では失敗する場合があります。
- Claude Desktop を開き、Settings → Extensions を選択します。
- Advanced settings → Install Extension… を開きます。
mcpb.mcpbを選択します。権限を確認し、Linkwarden API URL と Linkwarden API key を入力してから、Install をクリックします。- 読み取り専用にする場合は、Write scopes と Delete scopes を空欄にします。
- ツールが表示されない場合は、Claude Desktop を再起動します。
クローンから独自のバンドルをビルドします:
npx @anthropic-ai/mcpb pack mcpb
Windows では、ダブルクリックしても何も起こらないことが多く、ファイルをチャットにドラッグするとインストールではなく会話に添付されます。Settings の Install Extension… を使用してください。
手動での claude_desktop_config.json の代替手順: Claude Desktop の設定を編集してから、アプリを再起動します。
| OS | パス |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
{
"mcpServers": {
"linkwarden": {
"command": "uvx",
"args": ["linkwarden-mcp"],
"env": {
"LINKWARDEN_API_URL": "https://links.example.com",
"LINKWARDEN_API_KEY": "your-token"
}
}
}
}
ローカルクローン:
{
"mcpServers": {
"linkwarden": {
"command": "uv",
"args": ["run", "--directory", "/path/to/linkwarden-mcp", "linkwarden-mcp"],
"env": {
"LINKWARDEN_API_URL": "https://links.example.com",
"LINKWARDEN_API_KEY": "your-token"
}
}
}
}
Claude Code
CLI から追加します:
claude mcp add linkwarden --env LINKWARDEN_API_URL=https://links.example.com --env LINKWARDEN_API_KEY=your-token -- uvx linkwarden-mcp
または、~/.claude.json / プロジェクトの MCP 設定を編集します:
{
"mcpServers": {
"linkwarden": {
"command": "uvx",
"args": ["linkwarden-mcp"],
"env": {
"LINKWARDEN_API_URL": "https://links.example.com",
"LINKWARDEN_API_KEY": "your-token"
}
}
}
}
VS Code / GitHub Copilot
プロジェクトのルートに .vscode/mcp.json を作成します:
{
"servers": {
"linkwarden": {
"type": "stdio",
"command": "uvx",
"args": ["linkwarden-mcp"],
"env": {
"LINKWARDEN_API_URL": "https://links.example.com",
"LINKWARDEN_API_KEY": "your-token"
}
}
}
}
ローカルで編集可能:
{
"servers": {
"linkwarden": {
"type": "stdio",
"command": "uv",
"args": ["run", "--directory", "/path/to/linkwarden-mcp", "linkwarden-mcp"],
"env": {
"LINKWARDEN_API_URL": "https://links.example.com",
"LINKWARDEN_API_KEY": "your-token"
}
}
}
}
ウィンドウを再読み込みします。Copilot Chat を開き、linkwarden ツールが使用可能であることを確認します。
Windsurf
~/.codeium/windsurf/mcp_config.json(macOS/Linux)または Windsurf MCP 設定 UI を編集します:
{
"mcpServers": {
"linkwarden": {
"command": "uvx",
"args": ["linkwarden-mcp"],
"env": {
"LINKWARDEN_API_URL": "https://links.example.com",
"LINKWARDEN_API_KEY": "your-token"
}
}
}
}
保存後、Windsurf を再起動します。
Zed
Zed の settings.json の context_servers の下に追加します(Agent Panel → settings からも設定できます):
{
"context_servers": {
"linkwarden": {
"command": "uvx",
"args": ["linkwarden-mcp"],
"env": {
"LINKWARDEN_API_URL": "https://links.example.com",
"LINKWARDEN_API_KEY": "your-token"
}
}
}
}
Cline
Cline MCP 設定ファイル(Cline MCP UI から開く cline_mcp_settings.json)を編集します:
{
"mcpServers": {
"linkwarden": {
"command": "uvx",
"args": ["linkwarden-mcp"],
"env": {
"LINKWARDEN_API_URL": "https://links.example.com",
"LINKWARDEN_API_KEY": "your-token"
}
}
}
}
Continue
.continue/config.yaml で設定します:
mcpServers:
- name: linkwarden
command: uvx
args:
- linkwarden-mcp
env:
LINKWARDEN_API_URL: https://links.example.com
LINKWARDEN_API_KEY: your-token
汎用 / 任意の stdio MCP ホスト
stdio MCP サーバーを起動できるホストであれば使用できます:
| 項目 | 値 |
|---|---|
| コマンド | uvx |
| 引数 | linkwarden-mcp |
| 環境変数 | LINKWARDEN_API_URL、LINKWARDEN_API_KEY(および任意の書き込みスコープ) |
uvx linkwarden-mcp
クローンから開発する場合:uv run --directory /path/to/linkwarden-mcp linkwarden-mcp。
npx で実行できるのは npm パッケージのみです。これは Python パッケージなので、uvx を使用してください。
環境
| 変数 | 必須 | 備考 |
|---|---|---|
LINKWARDEN_API_URL | はい | ベース URL(必要な場合のみ /api/v1 を含めます。一般的な例:https://links.example.com) |
LINKWARDEN_API_KEY | はい | Settings → Access Tokens で取得するアクセストークン。Authorization: Bearer として送信され、ログには記録されません |
LINKWARDEN_MCP_WRITE_SCOPES | いいえ | 作成/更新を許可するドメインをカンマ区切りで指定します。空欄の場合は書き込みを行いません。 |
LINKWARDEN_MCP_DELETE_SCOPES | いいえ | 削除のみを許可するドメインをカンマ区切りで指定します。WRITE_SCOPES から暗黙的に許可されることはありません。 |
LINKWARDEN_MAX_BULK | いいえ | 一括操作あたりの最大レコード数(既定値は 25) |
TEST_LINKWARDEN_API_URL | 統合テストのみ | pytest -m integration 用の稼働中サンドボックス URL |
TEST_LINKWARDEN_API_KEY | 統合テストのみ | pytest -m integration 用の稼働中サンドボックスのトークン |
有効なスコープ:links、collections、tags、raw。ワイルドカード(*、all)は使用できません。raw を指定すると、有効なスコープがすべてのドメインスコープに拡張されます(緊急時の回避策)。
推奨(ほとんどのブックマークワークフローをカバーし、すべての変更系ツールを有効にすることはありません):
"LINKWARDEN_MCP_WRITE_SCOPES": "links,collections",
"LINKWARDEN_MCP_DELETE_SCOPES": "links"
スコープを指定しない場合の既定値:18 個のツール。WRITE と DELETE の両方ですべてのドメインスコープを指定した場合:31 個のツール。
従来の LINKWARDEN_MCP_ALLOW_WRITES / ALLOW_WRITES / LINKWARDEN_MCP_WRITES が設定されている場合、処理は失敗します。代わりにスコープ別の変数を使用してください。
MCP ホストの環境変数(.cursor/mcp.json または Cursor プラグインの Configure)は、プロセス環境変数/.env と一致させる必要があります。一致しないとスコープの動作にずれが生じます。
.env.example を参照してください。.env をコミットしないでください。 本番環境では Cursor プラグインの Configure UI またはシークレットマネージャーを使用してください。
書き込みスコープとタスクツール
LINKWARDEN_MCP_WRITE_SCOPES にスコープが指定されている場合、そのドメインのタスクツールがサーバーに登録されます。LINKWARDEN_MCP_DELETE_SCOPES を設定すると、ドメインごとの削除/マージツールが有効になります。list_resources を呼び出すと、read_only、スコープの一覧、現在の境界文字列を確認できます。
| ツール | スコープ | 目的 |
|---|---|---|
save_link | WRITE links | URL をコレクション(名前で指定)に保存します |
smart_save_link | WRITE links | 任意のヒューリスティックなコレクション/タグを使って保存します |
organise_links | WRITE links | 複数のリンクを移動またはタグ付けし直します |
update_link | WRITE links | リンクのフィールドを更新します(読み取り・変更・書き込み) |
queue_archive | WRITE links | 保存処理をキューに追加します(非同期で、すぐには実行されません) |
apply_triage_plan | WRITE links | [{link_id, collection?, tags?}] を適用します。デフォルトは dry_run=true です |
bulk_sort_by_rules | WRITE links | domain_pattern のルールに一致するものを整理します。デフォルトは dry_run=true です |
create_collection | WRITE collections | コレクションを作成します(任意で親を指定できます) |
auto_tag_by_domain | WRITE links + tags | ドメイン→タグのルールを適用します。デフォルトは dry_run=true です |
delete_links | DELETE links | 複数のリンクを削除します |
delete_tags | DELETE tags | ID または名前でタグを削除します |
merge_tags | DELETE tags | タグを新しい名前に統合します(破壊的操作) |
delete_collection | DELETE collections | リンクに対する削除/移動/キャンセルをユーザーが選択した後、コレクションを削除します(elicitation または on_links) |
推奨スコープのみを使った例:
"LINKWARDEN_MCP_WRITE_SCOPES": "links,collections",
"LINKWARDEN_MCP_DELETE_SCOPES": "links"
拒否リスト(常にブロック): /api/v1/tokens、/api/v1/session、/api/v1/auth、/api/v1/users/**(ただし GET /api/v1/users/me を除く)、マイグレーション、およびインスタンス全体の保存ワーカー操作。
ツール
読み取りツール
常に登録されます(合計 18 個)。
| ツール | 目的 |
|---|---|
list_resources | 検出。read_only と現在の書き込み/削除スコープを報告します |
search_links | クエリ、コレクション、タグ、またはピン留めの状態で検索します |
get_link | 1 件のリンクの全メタデータを取得します |
read_link_content | 保存されたプレーンテキスト(textContent またはアーカイブのフォールバック)を読み取ります |
list_collections | リンク数を含むコレクション一覧を取得します |
list_tags | リンク数を含むタグ一覧を取得します |
get_library_overview | 合計数、空のコレクション、未使用のタグを取得します |
suggest_collection_for_url | URL に対するヒューリスティックなコレクション候補を提案します |
suggest_tags_for_link | 既存のライブラリ内のタグを提案します(名前を新たに作ることはありません) |
find_unsorted_links | 未整理のリンクを一覧表示します(デフォルトのコレクション:Unorganized) |
triage_links | リンク ID に対するコレクション/タグを提案します(書き込みは行いません) |
find_duplicate_links | 正規化された URL が同じリンクをグループ化します |
recommend_collection_for_links | 複数のリンクに共通するコレクションを提案します |
suggest_links_for_collection | 別の場所にある、そのコレクションに属する可能性の高いリンクを探します |
analyze_collection_overlap | 2 つのコレクションで共通するドメイン/タグ/URL を比較します |
suggest_collection_structure | 整理状態を確認します:空のコレクション、名前がほぼ重複しているコレクション、リンクが多すぎるコレクション |
align_tags_with_similar_links | 類似ドメインのリンクで使われているタグを取得します |
get_sorting_dashboard | 1 回の処理でトリアージ情報を取得します:未整理、重複、空、最大規模 |
書き込みツール
対応するスコープが設定されている場合にのみ登録されます(上の表を参照)。受信トレイを整理する場合は、フィールドを直接編集するより smart_save_link/トリアージツールを優先してください。
| パターン | 必要なスコープ | 備考 |
|---|---|---|
| リンクの作成/更新/整理/アーカイブ | WRITE links | dry_run がデフォルトで設定されたワークフロー用の書き込みツールを含みます |
| コレクションの作成 | WRITE collections | 名前で親を任意に指定できます |
| ドメインに基づく自動タグ付け | WRITE links + tags | 既存のタグ名のみ使用します |
| 削除/タグの統合 | 対応する DELETE スコープ | 破壊的操作です。最初に ID を確認してください |
エージェントスキル
関連スキル:skills/linkwarden-bookmarks/SKILL.md。
Cursor プラグインは skills/ からこのスキルを検出します。プラグインを使わない場合は、このフォルダーをエージェントのスキルパスにコピーするか、シンボリックリンクを作成してください。このスキルでは、モデルに最初に list_resources を呼び出すこと、書き込み後に検証すること、優先するワークフローツールを指示します。
開発
uv sync --extra dev
npm install # installs lefthook + commitlint; registers git hooks
uv run linkwarden-mcp
オフラインテストのみ(respx)。Linkwarden の実環境は不要です:
uv run ruff check src tests
uv run pytest
Git フック(lefthook)
| フック/コマンド | 実行内容 |
|---|---|
| pre-commit | ruff check + pytest 全件(モック化したテストスイート) |
| commit-msg | commitlint による Conventional Commits |
npm run pre-publish | ビルド/twine の確認 → ruff → pytest → sdist の内容確認 → python -m build → twine check → npx @anthropic-ai/mcpb pack mcpb |
コミットメッセージは、例:feat(api): add delete_links tool のように Conventional Commits に従う必要があります。
リリースにタグを付ける前に、ローカルの公開ゲートを実行してください:
npm run pre-publish
GitHub Actions のマトリックス:Python 3.10 および 3.12。
注意事項
- 1 プロセスにつき 1 つの
LINKWARDEN_API_URLを使用します。複数インスタンスへのルーティングは対象外です。 - 共有インスタンスでの複数ユーザー/チームの識別は未検証です。共有ライブラリを実環境で検証するまでは、マルチテナント対応をうたわないでください。
- コレクション/タグの提案はヒューリスティックに基づき、ライブラリ内でのみ機能します。新しいタグ名を作り出すことはありません。
- 一括変更ワークフローでは、デフォルトで
dry_run=trueが設定されます。計画を確認した後にのみdry_run=falseに設定してください。 - ChatGPT Apps には、ホストされた HTTP MCP エンドポイントが必要です。このパッケージは stdio 専用です。
ライセンス
MIT。LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。