mcpField
L
Linkwarden MCP

Linkwarden MCP

ローカル
github.com生産性19 週間前に更新

Linkwarden MCP について

Linkwarden MCPはMCPクライアントをLinkwardenのブックマークライブラリに接続し、自然言語での検索や整理を可能にします。既定では読み取り専用で、書き込みと削除は個別のスコープ設定で有効にします。

主な機能

  1. 01ブックマーク、コレクション、タグの検索
  2. 02保存済み・アーカイブ済みページの読み取り
  3. 03既定で読み取り専用
  4. 04スコープ指定による書き込みツールの有効化
  5. 05個別スコープによる削除・統合ツール
  6. 06ブックマークのトリアージと整理ワークフロー

活用シーン

  1. 01トピック別に保存済みブックマークを検索
  2. 02コレクションやタグ内の項目を確認
  3. 03書き込みスコープを有効にしてリンクを保存・整理
  4. 04削除スコープを有効にしてリンクやタグを整理

MCP 対応

LinkwardenのHTTP APIに接続し、stdio経由でブックマーク、コレクション、タグの操作を提供します。書き込みと削除のツールは、それぞれのスコープが設定された場合にのみ登録されます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"flumpiey-linkwarden": {
"command": "uvx",
"args": [
"linkwarden-mcp"
],
"env": {
"LINKWARDEN_API_URL": "<LINKWARDEN_API_URL>",
"LINKWARDEN_API_KEY": "<LINKWARDEN_API_KEY>",
"LINKWARDEN_MCP_WRITE_SCOPES": "<LINKWARDEN_MCP_WRITE_SCOPES>",
"LINKWARDEN_MCP_DELETE_SCOPES": "<LINKWARDEN_MCP_DELETE_SCOPES>"
}
}
}
}
起動コマンドuvx linkwarden-mcp
設定が必要な環境変数
LINKWARDEN_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 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypilinkwarden-mcp0.1.6

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Linkwarden

linkwarden-mcp

セルフホスト型 Linkwarden 用の MCP サーバーです。ブックマーク、コレクション、タグについて AI に質問できます。

License: MIT Python MCP CI PyPI

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 つの場所で使用します(ロゴを変更する場合は、すべてを同期してください)。

  1. 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/ です。
  2. Cursor プラグイン: .cursor-plugin/plugin.json の logo → docs/linkwarden-icon.svg。
  3. Claude Desktop Extension: mcpb/icon.png(npx @anthropic-ai/mcpb pack mcpb でパッケージ化)。
  4. 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
アクセストークン
  1. Linkwarden インスタンス(セルフホストまたは Cloud)にサインインします。
  2. Settings → Access Tokens を開きます(または /settings/access-tokens に移動します)。
  3. New Access Token を作成して名前を付け、値をコピーして LINKWARDEN_API_KEY に設定します。
  4. 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、または本番環境ではシークレットマネージャーを使用してください。

クイックスタート

PyPI パッケージを uvx で実行します:

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 プラグインです。

  1. クローンを ~/.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
      
  2. ウィンドウを再読み込みします。
  3. linkwarden-mcp の Plugins → Configure を開きます。Linkwarden API URL と Linkwarden API key を設定します。読み取り専用で使用する場合は Write scopes / Delete scopes を空欄のままにするか、links,collections のような CSV を貼り付けます。
  4. Customize / MCP で linkwarden MCP サーバーが有効になっていることを確認します。

マーケットプレイスへの掲載は、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 では失敗する場合があります。

  1. Claude Desktop を開き、Settings → Extensions を選択します。
  2. Advanced settings → Install Extension… を開きます。
  3. mcpb.mcpb を選択します。権限を確認し、Linkwarden API URL と Linkwarden API key を入力してから、Install をクリックします。
  4. 読み取り専用にする場合は、Write scopes と Delete scopes を空欄にします。
  5. ツールが表示されない場合は、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_linkWRITE linksURL をコレクション(名前で指定)に保存します
smart_save_linkWRITE links任意のヒューリスティックなコレクション/タグを使って保存します
organise_linksWRITE links複数のリンクを移動またはタグ付けし直します
update_linkWRITE linksリンクのフィールドを更新します(読み取り・変更・書き込み)
queue_archiveWRITE links保存処理をキューに追加します(非同期で、すぐには実行されません)
apply_triage_planWRITE links[{link_id, collection?, tags?}] を適用します。デフォルトは dry_run=true です
bulk_sort_by_rulesWRITE linksdomain_pattern のルールに一致するものを整理します。デフォルトは dry_run=true です
create_collectionWRITE collectionsコレクションを作成します(任意で親を指定できます)
auto_tag_by_domainWRITE links + tagsドメイン→タグのルールを適用します。デフォルトは dry_run=true です
delete_linksDELETE links複数のリンクを削除します
delete_tagsDELETE tagsID または名前でタグを削除します
merge_tagsDELETE tagsタグを新しい名前に統合します(破壊的操作)
delete_collectionDELETE 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_link1 件のリンクの全メタデータを取得します
read_link_content保存されたプレーンテキスト(textContent またはアーカイブのフォールバック)を読み取ります
list_collectionsリンク数を含むコレクション一覧を取得します
list_tagsリンク数を含むタグ一覧を取得します
get_library_overview合計数、空のコレクション、未使用のタグを取得します
suggest_collection_for_urlURL に対するヒューリスティックなコレクション候補を提案します
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_overlap2 つのコレクションで共通するドメイン/タグ/URL を比較します
suggest_collection_structure整理状態を確認します:空のコレクション、名前がほぼ重複しているコレクション、リンクが多すぎるコレクション
align_tags_with_similar_links類似ドメインのリンクで使われているタグを取得します
get_sorting_dashboard1 回の処理でトリアージ情報を取得します:未整理、重複、空、最大規模
書き込みツール

対応するスコープが設定されている場合にのみ登録されます(上の表を参照)。受信トレイを整理する場合は、フィールドを直接編集するより smart_save_link/トリアージツールを優先してください。

パターン必要なスコープ備考
リンクの作成/更新/整理/アーカイブWRITE linksdry_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-commitruff check + pytest 全件(モック化したテストスイート)
commit-msgcommitlint による 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 を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。