Skip to main content
Glama

linkwarden-mcp

CI npm downloads container node license docs

Linkwarden용 Model Context Protocol 서버입니다. Linkwarden은 저장된 모든 페이지의 영구 복사본을 보관하는 자체 호스팅 북마크 관리자입니다.

MCP 클라이언트 — Claude Code, Claude Desktop, Codex — 가 북마크 컬렉션을 검색하고, 컬렉션과 태그로 정리하며, 저장된 페이지의 보존된 기사 텍스트를 읽을 수 있어, 아카이브된 링크를 다시 라이브 사이트를 가져오지 않고 요약하거나 인용할 수 있습니다.

📖 전체 문서는 linkwarden-mcp.ni-c.de에서 확인하세요

Demo

참고: Linkwarden의 공개 API 참조는 불완전합니다. 이 서버는 linkwarden/linkwarden의 apps/web/pages/api/v1/** 라우트와 packages/lib/schemaValidation.ts의 요청 스키마를 기준으로 작성되었으며, v2.16.0 (2026-08-17)에서 확인되었습니다. 이 두 파일이 여기에 있는 모든 도구의 진실 공급원(source of truth)입니다.

요구 사항

  • Node.js ≥ 22

  • 실행 중인 Linkwarden 인스턴스

  • 설정 → 액세스 토큰에서 생성한 액세스 토큰

Linkwarden에는 토큰별 범위가 없습니다. 토큰은 생성한 계정의 모든 권한을 가집니다. 이 서버가 접근해야 하는 컬렉션에만 접근할 수 있는 전용 계정을 만들고, 관리자 토큰을 넘겨주지 마세요.

Related MCP server: raindrop-mcp

구성

변수

필수

설명

LINKWARDEN_URL

예

기본 URL (예: https://links.example.net, /api/v1 제외)

LINKWARDEN_TOKEN

예

설정 → 액세스 토큰에서 생성한 액세스 토큰

LINKWARDEN_READ_ONLY

아니요

true로 설정하면 읽기 도구만 등록

LINKWARDEN_INSECURE_TLS

아니요

true로 설정하면 자체 서명 인증서 허용 (이 연결에만 적용)

https://를 사용하세요. 일반 http를 사용하면 토큰이 암호화되지 않고 전송됩니다. 호스트가 로컬이 아닌 경우 서버에서 경고를 출력합니다. 자체 서명 인증서의 경우 LINKWARDEN_INSECURE_TLS보다는 적절한 내부 CA를 사용하는 것이 좋습니다.

토큰은 읽힌 후 프로세스 환경에서 제거되므로, 자식 프로세스나 /proc/<pid>/environ에서 볼 수 없습니다.

자격 증명 없이도 서버는 시작되고 도구 목록을 표시하므로, 레지스트리나 검사 도구가 내부를 들여다볼 수 있습니다. 그러나 모든 호출은 API에 도달하는 대신 설정 안내와 함께 실패합니다.

설치

Claude Code

claude mcp add linkwarden -e LINKWARDEN_URL=https://links.example.net -e LINKWARDEN_TOKEN=… -- npx -y linkwarden-mcp

Claude Desktop

{
  "mcpServers": {
    "linkwarden": {
      "command": "npx",
      "args": ["-y", "linkwarden-mcp"],
      "env": {
        "LINKWARDEN_URL": "https://links.example.net",
        "LINKWARDEN_TOKEN": "…"
      }
    }
  }
}

Codex

[mcp_servers.linkwarden]
command = "npx"
args = ["-y", "linkwarden-mcp"]
env = { LINKWARDEN_URL = "https://links.example.net", LINKWARDEN_TOKEN = "…" }

소스에서

npm install && npm run build
LINKWARDEN_URL=https://links.example.net LINKWARDEN_TOKEN=… node dist/index.js

Docker

docker build -t linkwarden-mcp .
docker run --rm -i \
  -e LINKWARDEN_URL=https://links.example.net \
  -e LINKWARDEN_TOKEN=… \
  linkwarden-mcp

도구

읽기

도구

설명

search_links

북마크 검색 또는 목록 보기. Linkwarden의 필드 필터(tag:, collection:, before:, ! …) 지원.

get_link

태그, 컬렉션, 보존된 형식의 존재 여부가 포함된 북마크 하나를 반환.

get_link_content

저장된 페이지의 보존된 기사 텍스트. 긴 문서는 분할하여 반환.

list_collections

링크 수와 함께 모든 컬렉션 표시; parentId로 중첩 구조 표현.

get_collection

구성원별 권한을 포함한 하나의 컬렉션.

list_tags

링크 수와 태그별 아카이브 설정이 포함된 태그 목록.

get_tag

하나의 태그.

get_dashboard

Linkwarden 대시보드에 표시되는 최근 추가 및 고정된 링크.

list_rss_subscriptions

이 계정이 구독 중인 RSS 피드.

get_current_user

토큰이 속한 계정과 아카이브 기본값을 확인. 연결 상태 확인에 유용.

get_worker_stats

보존 및 검색 색인 큐 상태. 관리자 계정만 가능 — 그 외는 HTTP 403.

쓰기

LINKWARDEN_READ_ONLY=true인 경우 전혀 등록되지 않습니다. 🔒 표시된 도구는 확인 토큰이 필요합니다.

도구

설명

create_link

북마크 저장, 선택적으로 태그와 컬렉션 지정 가능 (컬렉션은 필요 시 생성).

update_link

제목, 설명, 태그 또는 컬렉션 변경. 🔒 URL이 변경될 때만 필요.

set_link_pinned

이 계정의 링크를 고정 또는 고정 해제.

delete_link 🔒

북마크와 보존된 복사본 삭제.

bulk_update_links 🔒

여러 링크에 하나의 태그 목록 및/또는 컬렉션을 적용.

bulk_delete_links 🔒

여러 북마크를 한 번에 삭제.

represerve_link 🔒

기존 아카이브를 삭제하고 페이지를 다시 보존.

delete_link_preservations 🔒

여러 링크의 아카이브를 삭제하되 북마크는 유지.

create_collection

컬렉션 생성, 선택적으로 중첩 가능.

update_collection

컬렉션 이름 변경, 상위 컬렉션 변경 또는 공개. 🔒 공개할 때만 필요.

delete_collection 🔒

컬렉션 삭제 — 하위 링크와 하위 컬렉션까지 함께 삭제.

create_tags

태그 생성 또는 아카이브 설정 변경 (이름 기준 upsert).

rename_tag

태그 이름 변경.

delete_tags 🔒

태그 삭제; 링크는 유지.

merge_tags 🔒

여러 태그를 하나의 새 태그로 병합.

create_rss_subscription

RSS/Atom 피드 구독.

delete_rss_subscription 🔒

피드 폴링 중지.

의도적으로 노출하지 않은 기능

  • 액세스 토큰 관리 (/tokens). API 자격 증명을 생성할 수 있는 도구는 권한 상승 표면이 되며, 북마크 서버가 이를 보유할 이유가 없습니다.

  • 사용자 관리 (/users, 계정 삭제). 범위를 벗어납니다.

  • 백업 내보내기 및 가져오기 (/migration). 내보내기는 전체 인스턴스를 모델 컨텍스트에 덤프하고, 가져오기는 인스턴스를 파괴할 수 있습니다.

  • 하이라이트. 생성하려면 보존된 문서의 정확한 문자 오프셋이 필요하지만, 모델이 의미 있게 생성할 수 없으며 Linkwarden은 기존 하이라이트를 나열하는 경로를 제공하지 않습니다.

  • 아카이브 업로드 및 서명된 preserved URL. NEXT_PUBLIC_USER_CONTENT_DOMAIN이 구성되어 있어야 합니다.

  • 더 이상 사용되지 않는 GET /links 목록 경로 — search_links는 대신 GET /search를 사용하며, Linkwarden 자체에서 권장하는 방식입니다.

안전

  • 파괴적 도구는 두 단계로 이루어집니다. 첫 번째 호출은 정확한 대상에 바인딩된 수명이 짧은 확인 토큰을 반환하며, 두 번째 호출이 그 토큰을 가지고 있어야 작업이 수행됩니다. 모델은 이 게이트를 스스로 충족할 수 없으며, 한 링크, 태그 집합 또는 변경에 대해 발급된 토큰은 다른 용도로 재사용될 수 없습니다.

  • 가시성 확대는 파괴적 행위로 간주됩니다. 컬렉션 공개 및 링크 URL 변경(이전 페이지의 모든 보존 복사본이 삭제됨)은 모두 확인이 필요하며, 단순 삭제만 해당되지 않습니다.

  • 확인 프롬프트는 Linkwarden의 내용을 인용하지 않습니다. 제목, URL, 설명 및 컬렉션 이름은 저장된 페이지와 인스턴스의 다른 사용자로부터 비롯되며, 모델이 읽는 텍스트에는 숫자와 ID만 표시됩니다.

  • 반환된 콘텐츠는 신뢰할 수 없는 데이터로 표시되며, 특히 보존된 기사 텍스트는 대상 사이트를 제어하는 사람이 작성한 것입니다.

  • 부분 업데이트는 필드를 지우지 않습니다. Linkwarden의 업데이트 경로는 전체 레코드를 교체하므로, 이 서버는 현재 상태를 읽고 병합합니다. 그렇지 않으면 업데이트 시 링크의 태그나 컬렉션의 협력자가 조용히 사라집니다.

  • 200 응답만으로 신뢰하지 않습니다. 여러 Linkwarden 경로는 HTTP 200과 본문에 오류 문장으로 실패를 보고하며, 사용된 메서드에 대한 핸들러가 없는 경로는 아무것도 없이 200으로 응답합니다. 이 두 경우 모두 성공적인 쓰기 대신 오류로 보고됩니다.

  • 오류 본문은 잘리고, HTML 오류 페이지는 완전히 삭제되며, 리디렉션은 절대 따르지 않습니다(따라서 Bearer 토큰이 다른 호스트로 재사용될 수 없음). 모든 요청에는 타임아웃이 설정되어 있습니다.

  • LINKWARDEN_READ_ONLY=true는 쓰기 도구를 전혀 등록하지 않습니다.

  • 잔여 위험: 구성한 토큰의 권한 범위 내에서, 사용자가 확인한 후 모델이 파괴적인 작업을 수행하도록 요청받으면 실제로 수행될 수 있습니다. 계정의 범위를 좁히고, 호스트 수준의 권한 프롬프트를 유지하세요.

개발

npm install
npm run build
npm test
npm run test:coverage
npm run lint
npm run format
npm run docs:tools     # regenerate docs/reference/tools.md from the registered tools

docs/reference/tools.md는 생성되는 파일입니다. 커밋된 복사본이 더 이상 코드와 일치하지 않으면 CI가 실패합니다. 문서 사이트는 docs/에 있으며 자체 package.json과 lockfile을 가지고 있습니다. VitePress는 Docker 빌드 및 전체 테스트 매트릭스에서 실행되는 루트 설치에 포함되어서는 안 됩니다.

CONTRIBUTING.md를 참조하세요.

릴리스

모든 것은 태그로 구동됩니다. 수동 게시 단계는 없습니다.

  1. CHANGELOG.md의 [Unreleased] 섹션을 새 버전으로 이동하고 날짜를 기입합니다. 릴리스 워크플로가 awk로 해당 섹션을 추출하므로 ## [x.y.z] 제목 형식이 중요합니다.

  2. package.json의 version을 업데이트합니다.

  3. npm run lint && npm run build && npm run test:coverage를 실행합니다.

  4. 커밋한 후, 서명된 주석 태그를 만듭니다:

    git tag -s v0.1.1 -m "v0.1.1"
    git push origin main v0.1.1

그러면 release.yml이 태그가 package.json과 일치하는지 확인하고, Trusted Publishing(OIDC — 유출될 npm 토큰이 없음)을 통해 증명(provenance)과 함께 npm에 게시하며, 두 server.json 패키지 항목에 버전을 동기화하고, MCP 레지스트리에 게시한 후, 변경 로그 섹션에서 GitHub 릴리스를 생성합니다. ci.yml은 병렬로 멀티 아키텍처 컨테이너 이미지를 GHCR에 푸시합니다.

레지스트리 단계가 실패하면 main에서 수정하고 mcp-registry.yml 워크플로를 수동으로 실행하십시오. 실패한 작업을 다시 실행하는 것은 옵션이 아닙니다. 불변 태그를 체크아웃하므로 main의 수정 사항이 해당 태그에 도달할 수 없습니다.

라이선스

MIT © Willi Thiel

Available Tools

28 tools
create_collectionCreate a collectionA

Creates a collection. Pass parent_id to nest it under an existing collection. New collections are private; use update_collection to publish one.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCollection name
colorNoAccent colour as a hex value, e.g. #0ea5e9
parent_idNoNest the new collection under this one
descriptionNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are empty, so description carries full burden. It reveals that new collections are private (important behavioral trait), but doesn't state permissions, rate limits, or effects on existing data. Adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no fluff. Front-loads the core verb and object, then adds key behavior and alternatives. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Tool is simple (create-only, no output schema) so description feels mostly complete. However, lacks guidance on required permissions, response format, or validation (e.g., uniqueness constraints). Adequate for a basic create tool but could do more.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% (3 of 4 parameters have descriptions). The description adds meaningful context: parent_id for nesting, and the private-default behavior, which enhances understanding beyond the schema. Only the description parameter lacks schema description, but bulk is covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states it creates a collection, which is clear. It doesn't distinguish from sibling tools like update_collection or delete_collection, but naming and context make it distinct enough.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear guidance on when to use it ('Creates a collection') and explicit alternatives (use update_collection to publish), plus optional nesting via parent_id.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_rss_subscriptionSubscribe to an RSS feedA

Subscribes to an RSS or Atom feed. Linkwarden polls it and files every new entry as a link in the given collection, preserving the pages according to the account defaults.

Linkwarden fetches the feed once immediately, so an unreachable feed fails right away. Because that fetch happens on the Linkwarden server, a URL addressing its own loopback or the link-local range is refused here before the request is made. That check covers the feed URL only — Linkwarden creates and preserves a link for every entry the feed contains, and on versions before 2.14 it does not check those addresses at all. Do not subscribe to a feed you do not trust. Subscription names must be unique per account, and instances cap the number of subscriptions (20 by default).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesFeed URL, including the scheme
nameYesName for the subscription, unique within the account
collection_idNoCollection the entries land in. Mutually exclusive with collection_name.
collection_nameNoCollection by name; it is created if it does not exist. Mutually exclusive with collection_id.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With empty annotations, the description carries the full burden, and it delivers: immediate fetch behavior, failure on unreachable feeds, SSRF pre-check scope and its version-specific limitation, and side effects like creating and preserving links for feed entries. This is unusually transparent about security and operational caveats.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than average, but nearly every sentence carries important behavioral or security information. It front-loads the core purpose and then expands into necessary caveats. A slightly tighter structure could improve readability, but there is little waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers behavior, security risks, version-specific behavior, uniqueness constraints, and instance quotas. The main gap is that collection_id and collection_name are optional in the schema, but the description never explains what happens when neither is provided or which default collection is used.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers 100% of parameters with meaningful descriptions, so the baseline is 3. The description adds context about the collection receiving entries and names being unique, but those details are already present or weakly connected to specific parameters. It does not materially improve on the schema's parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Subscribes to'), a clear resource ('an RSS or Atom feed'), and the core behavior (polling and filing entries as links). This clearly distinguishes it from siblings like create_link and delete_rss_subscription.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear operational context: this is a subscription tool that polls feeds and preserves each entry as a link. It does not explicitly compare itself to create_link or other siblings, but the behavioral description makes the appropriate use case obvious. Security guidance about untrusted feeds also informs whether to use the tool at all.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_tagsCreate tags or change their archival settingsA
Idempotent

Creates tags, or updates the ones that already exist — the underlying route is an upsert keyed on the tag name. This is also the only way to set the per-tag archival overrides, which decide how links carrying the tag get preserved.

Note that tags are usually created implicitly by create_link and update_link; use this tool when the archival settings matter, or to create a tag before any link uses it.

ParametersJSON Schema
NameRequiredDescriptionDefault
namesYesTag names, at most 50. Existing tags are updated rather than duplicated.
ai_tagNoLet the configured AI model assign this tag for links carrying this tag. null inherits the account default.
archive_as_pdfNoStore a PDF for links carrying this tag. null inherits the account default.
archive_as_monolithNoStore a single-file HTML copy for links carrying this tag. null inherits the account default.
archive_as_readableNoStore the readable article text (this is what get_link_content reads) for links carrying this tag. null inherits the account default.
archive_as_screenshotNoStore a screenshot for links carrying this tag. null inherits the account default.
archive_as_wayback_machineNoSubmit the URL to the Internet Archive for links carrying this tag. null inherits the account default.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description reveals the upsert behavior and that existing tags are updated rather than duplicated, which is important context that is not visible from the idempotentHint annotation alone. It also explains the role of archival overrides, though it does not describe the exact return value or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core action and upsert behavior, followed by a short note on when to use the tool. Every sentence adds useful information and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description plus schema covers the required parameter, optional archival flags, null semantics, and the relationship to implicit tag creation. It does not explain the response shape, but for an idempotent upsert tool with all parameter semantics in the schema, that is a minor omission rather than a correctness gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all seven parameters having meaningful descriptions including the null-inherits-account-default semantics. The tool description adds conceptual context around archival settings, but the parameter-level meaning is already fully supplied by the schema, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates tags or updates existing ones via an upsert keyed on the tag name. It also distinguishes this from the sibling tools list_tags, delete_tags, rename_tag, and merge_tags by emphasizing this is the only way to set per-tag archival overrides.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent that tags are usually created implicitly by create_link and update_link, and directs the agent to use this tool when archival settings matter or when creating a tag before a link uses it. This provides clear decision-making guidance relative to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_collectionDelete a collectionA
Destructive

Deletes a collection. This cascades: every link inside it, every preserved copy of those pages, and every sub-collection below it are deleted too. Two-step: the first call reports how many links would be lost and returns a confirmation token.

ParametersJSON Schema
NameRequiredDescriptionDefault
collection_idYesNumeric id of the collection — the "id" field returned by list_collections
confirm_tokenNoConfirmation token from a previous call of this tool with the same arguments. Omit on the first call.

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint annotation, the description discloses critical behaviors: cascading deletion (links, copies, sub-collections) and the two-step confirmation mechanism, giving the agent full knowledge of the tool's impact.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise—two sentences—with each sentence adding distinct value: first states the action, then explains the cascading scope and two-step workflow. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core action, cascading effect, and two-step confirmation, which is sufficient for a deletion tool. However, it does not describe the return value format of the preview call or error scenarios, leaving a minor gap in completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already defines both parameters. The description adds no new meaning to the parameters beyond what is in the schema, resulting in a baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Deletes a collection' and explains the cascading effect on links, preserved copies, and sub-collections, distinguishing it from sibling tools like delete_link which only delete single links.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description outlines the two-step process (preview then confirm), which provides usage context, but it does not explicitly state when to use this tool over alternatives like update_collection or delete_link, nor does it mention prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_rss_subscriptionDelete an RSS subscriptionA
Destructive

Stops polling a feed. Links that were already created from it stay where they are — only the subscription goes away.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirm_tokenNoConfirmation token from a previous call of this tool with the same arguments. Omit on the first call.
rss_subscription_idYesNumeric id of the RSS subscription — the "id" field returned by list_rss_subscriptions

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation already marks destructiveHint as true, so the description's job is to add nuance. It does exactly that by specifying the precise behavioral nuance: 'Links that were already created from it stay where they are — only the subscription goes away.' This informs the agent of the non-destructive consequence on related links, which goes beyond the annotation's flat destructive flag.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, effective sentence that front-loads the action ('Stops polling a feed') and then adds a clarifying nuance. No unnecessary words or repetitions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that the tool has only two parameters, an annotation for destructiveness, and no output schema, the description covers the essentially needed behavioral uniqueness (keeping existing links). It is complete enough for an agent to understand the tool's effect without missing critical context, though it could marginally benefit from mentioning the two-phase confirmation process implied by the confirm_token parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema describes both parameters with adequate descriptions (100% coverage). The description does not add additional parameter semantics beyond what the schema provides (e.g., no extra guidance on the confirm_token's two-step flow). Therefore, the score is at the baseline of 3 since the schema already carries the burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states what the tool does: it stops polling a feed (delete operation on an RSS subscription). This is distinct from sibling tools like 'create_rss_subscription' and 'list_rss_subscriptions'. However, the verb 'stops polling' is slightly less direct than 'delete', but the context makes it clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly clarifies that existing created links are not affected, which helps an agent understand the non-destructive side effect. However, it does not explicitly state when to use this versus other tools (e.g., no mention of alternative approaches like disabling the subscription via another tool if that existed), nor does it mention prerequisites such as listing subscriptions first to get the ID.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_tagsDelete tagsA
Destructive

Deletes one or more tags. The links keep existing, they just lose the tag. Two-step: the first call returns a confirmation token bound to exactly this set of ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_idsYesTag ids, at most 50
confirm_tokenNoConfirmation token from a previous call of this tool with the same arguments. Omit on the first call.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description provides behavioral details beyond the destructiveHint annotation: it states that links keep existing but lose the tag, and it reveals the two-step confirmation pattern. This fully informs the agent about the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences long, front-loaded with the core action, and every sentence adds essential information. There is no redundancy or unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (two-step destructive operation), the description is complete: it explains the effect on links, the confirmation process, and the token constraint. No output schema exists, but the description implies the tool returns a confirmation token on the first call, which is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage with clear explanations for both parameters. The description adds value by explaining the role of confirm_token and the fact that it is bound to the exact set of ids, which is not in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'deletes' and the resource 'tags', and distinguishes itself from sibling tools like delete_link, delete_collection, and merge_tags by specifying the effect on links and the two-step confirmation process.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly explains the two-step workflow: first call returns a confirmation token, then the second call with the token. It implies the tool is for deleting tags, but does not explicitly mention when not to use it (e.g., when you want to rename or merge tags instead). However, the context of sibling tools provides enough differentiation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_collectionGet a collectionA
Read-only

Fetches one collection with its link count and the per-member create/update/delete permissions. Use search_links with collection_id to get the links inside it.

ParametersJSON Schema
NameRequiredDescriptionDefault
collection_idYesNumeric id of the collection — the "id" field returned by list_collections

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context about what the tool returns (link count and permissions) beyond what the annotation (readOnlyHint: true) provides. However, it does not describe any side effects, rate limits, or auth requirements. Since the annotation already covers safe read behavior, the description's additional detail is useful but not extensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loading the primary action and key outputs in the first sentence, then providing the usage alternative in the second. Every sentence is purposeful with zero wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has a single parameter with a clear schema, read-only annotations, and a straightforward purpose (fetching a collection), the description covers the essential context well. It explains key outputs (link count, permissions) and directs to the sibling tool for more detail. The only minor gap is not describing the structure of the returned collection object, but for a simple fetch operation this is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not add additional meaning to the parameter beyond what the schema already provides (the schema documents the integer type, range, and source). The description mentions 'link count' and 'permissions' but ties these to the function's result, not specifically to the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific verb 'Fetches' and resource 'one collection' along with specific details like 'link count' and 'per-member create/update/delete permissions.' It also distinguishes the tool from the sibling 'search_links' by specifically pointing out that to get the links inside a collection, one should use 'search_links with collection_id.' This differentiation makes it highly effective for an agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool versus an alternative: 'Use search_links with collection_id to get the links inside it.' This is excellent guidance. However, it lacks explicit 'when not to use' scenarios or other exclusions, leaving a small gap from a perfect score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_current_userGet the authenticated accountA
Read-only

Reports which Linkwarden account the configured token belongs to and that account's archival defaults — which formats new links get preserved in, and whether duplicate URLs are rejected. Useful as a connectivity check and before creating links, because the defaults decide what get_link_content will later have to read.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true. The description adds value by detailing what information is reported (account identity and archival defaults) and why it matters for subsequent operations, without contradicting the safe read behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two succinct sentences. The first sentence front-loads the core purpose (report account and defaults). The second sentence adds context without redundancy. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite lacking an output schema, the description adequately explains the return value (account, preservation formats, duplicate URL rejection) and provides practical usage context. Complete for a zero-parameter informational tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so baseline is 4. The description does not need to add parameter information and instead focuses on the tool's output and use case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Reports which Linkwarden account the configured token belongs to and that account's archival defaults', clearly specifying the verb and resource. It differentiates from sibling tools like create_link or get_link_content by indicating its role as a connectivity check and prerequisite.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states usefulness 'as a connectivity check and before creating links', providing clear context for when to use. Does not include when-not-to-use or alternative tools, but the purpose is straightforward enough that this is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_dashboardGet the dashboard linksA
Read-only

Returns the links Linkwarden shows on its dashboard: the most recently added ones together with everything the account has pinned, deduplicated. A quick "what is going on here" overview — use search_links for anything targeted.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation already declares readOnlyHint=true, so the tool is understood to be a safe read. The description adds value by explaining the specific content (recent + pinned, deduplicated) and framing it as a dashboard overview. However, it doesn't detail pagination behavior or limits on the returned set, which would be helpful but is a minor gap given the tool's simplicity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with zero filler. The first sentence states the core functionality, and the second provides usage context. Every word serves a purpose, and it is perfectly front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters, no output schema, but has complete annotations, the description covers everything: what the tool returns, its behavioral characteristics (deduplication, composition), and when to use an alternative. There are no gaps for the intended oversight use case.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% because there are no parameters. The description doesn't need to add parameter info; it naturally explains what the tool returns. Baseline 3 is appropriate as the schema and description together are complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns the links shown on the Linkwarden dashboard, specifically the most recently added ones together with pinned items, deduplicated. The verb 'returns' and resource 'the links Linkwarden shows on its dashboard' are specific and unambiguous, and the mention of deduplication adds precision that distinguishes it from a generic link listing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says this is for a 'quick overview' and directs the agent to use 'search_links for anything targeted.' This provides clear guidance on when to use this tool versus alternatives, making the sibling differentiation immediate and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tagGet a tagA
Read-only

Fetches one tag with its archival settings. Use search_links with tag_id to get the links carrying it.

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_idYesNumeric id of the tag — the "id" field returned by list_tags

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds context beyond the readOnlyHint annotation by stating that it fetches 'archival settings' along with the tag, which hints at what the response includes. However, it does not disclose whether the tag is returned with its full metadata or any potential rate limits. The annotation already covers the safe read behavior, so the description provides useful additional detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero waste. The first sentence states the core purpose, and the second provides a critical usage guideline. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the single required parameter, perfect schema coverage, readOnlyHint annotation, and no output schema, the description adequately covers the tool's purpose and how to use it. A small improvement would be to mention the response format or any pagination details, but it is largely complete for this simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already describes tag_id well. The description adds value by mentioning 'archival settings' in the output, but does not elaborate on the parameter beyond what the schema provides. Since no further param info is needed, a 4 is justified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Fetches one tag with its archival settings', which is a specific verb + resource combination. It also distinguishes from sibling tools like search_links, get_link, and list_tags by specifying what it does (fetches a tag with archival settings) and what it doesn't do (get links).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells when to use this tool and when not to: it says to use search_links with tag_id to get the links carrying the tag. This provides clear guidance on using an alternative sibling tool for related functionality, making the decision boundary unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_worker_statsGet preservation queue statisticsA
Read-only

Reports how many links are waiting to be preserved, how many succeeded and how many failed, plus the search-index backlog. Use it to find out whether a page requested through represerve_link has been archived yet.

Requires the instance administrator account (the id in NEXT_PUBLIC_ADMIN, 1 by default); every other account gets HTTP 403 here. The counts cover the whole instance, not just this account.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral context beyond the readOnlyHint annotation: it discloses the admin authentication requirement, the 403 response for non-admins, and that counts are instance-wide. This fully informs the agent about access control and scope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five sentences, well-structured with main purpose first, use case second, and critical auth details in a separate paragraph. Every sentence adds value without repetition or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a stat-reporting tool with no parameters and no output schema, the description covers purpose, use case, auth, and scope. It could be improved by mentioning the output format (e.g., integer counts), but it's largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters and 100% schema description coverage, the baseline is 4. The description adds no parameter information because none exist, so it meets the baseline. No additional value needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states what the tool reports (waiting, succeeded, failed counts, search-index backlog) and gives a specific use case (checking if a represerve_link page is archived). It distinguishes this tool from sibling tools by focusing on queue statistics rather than individual link operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use the tool (to check on represerve_link results) and who can use it (admin account only, others get 403). It does not mention alternative tools or when not to use it, but the admin restriction provides clear guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_collectionsList collectionsA
Read-only

Lists every collection the authenticated account owns or is a member of, with its link count. The list is flat: nesting is expressed through parentId, where null means the collection sits at the top level. Linkwarden does not page this route, so all collections come back at once.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds valuable behavioral details: the flat format with parentId, explicit note on no pagination ('all collections come back at once'), and that it includes both owned and membership collections. These go beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, all essential. First sentence states purpose and output, second explains structure, third clarifies no pagination. No filler. Could be slightly more structured with bullet points for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-output-schema tool with good annotations, this description is complete. It tells the agent exactly what to expect: shape (flat list), field semantics (parentId null = top level), cardinality (all at once), and scope (owned or member). No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has no parameters and 100% coverage, so the description's job is lighter. It adds context about the kind of results expected (flat list, parentId semantics, link count), which helps the agent interpret the incoming data structure even without an output schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Lists') and clearly states what the tool returns: every collection the user owns or is a member of, along with link count. It also distinguishes itself from other list operations by specifying that the result is flat (with parentId for nesting) and not paged.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is for getting an overview of all available collections without pagination. However, it does not explicitly state when to use this over sibling tools like get_collection or list_tags, nor does it mention any prerequisites or restrictions (e.g., why you might prefer a filtered query if it existed).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_rss_subscriptionsList RSS subscriptionsA
Read-only

Lists the RSS feeds this account subscribes to. Linkwarden polls them and files new entries as links in the configured collection.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds value beyond the readOnlyHint annotation by explaining that Linkwarden polls these feeds and files entries, giving the agent insight into the side-effect context of the list operation. It does not contradict the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loaded with the core action, and every word adds value. No redundant or irrelevant text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters and no output schema, the description sufficiently explains what the tool does and its integration with Linkwarden. A minor gap is the lack of mention about the return format (e.g., list of feed names/URLs), but the agent can infer a standard list structure from the context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters and schema description coverage is 100%, so no parameter elaboration is needed from the description. The description adds a point about how the feeds are used, which is relevant context for the no-parameter call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Lists') and resource ('RSS feeds this account subscribes to'). It clearly distinguishes from sibling tools like 'delete_rss_subscription' as a read/list operation, and provides additional context about Linkwarden polling behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool is for viewing current subscriptions before performing actions like deletion. However, it does not explicitly state when not to use it or provide alternatives for filtering or searching subscriptions among the listed siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tagsList tagsA
Read-only

Lists the tags of the authenticated account with the number of links each one is attached to. Tags cut across collections. The per-tag archival settings are included: null there means "inherit the account default", which is not the same as false.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoSort order, default date_newest
cursorNoOpaque pagination cursor. Pass back the "next_cursor" value from a previous result verbatim; do not compute or increment it — depending on whether the instance runs Meilisearch it is either a row offset or the last id seen.
searchNoOnly return tags whose name contains this text

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it as read-only. The description adds valuable behavioral context: the meaning of null in per-tag archival settings ('inherit the account default, not the same as false') and the cross-collection scope. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the primary action. Every sentence adds unique value with no redundancy or wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 3 optional parameters, no output schema, and readOnly annotation, the description covers the key output fields (link count, archival settings) and cross-collection behavior. It does not detail pagination or full response structure, but the cursor parameter implies pagination.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all three parameters with 100% descriptive coverage. The description adds no additional parameter-level meaning; it only describes the output. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists tags with their link counts, notes that tags cut across collections, and includes archival settings. This distinguishes it from siblings like get_tag (single tag) or create_tags (creation).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for listing all tags across collections, but does not explicitly state when to use it versus alternatives like get_tag or merge_tags. No 'when not to use' guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

merge_tagsMerge tags into oneA
Destructive

Folds several tags into a single new one: every link that carried any of the source tags gets the new tag, and the source tags are deleted.

Two things to know before calling this. The new tag is created from scratch, so the name must not already be in use by this account — merging into an existing name fails. And the per-tag archival settings of the source tags are not carried over; set them again with create_tags afterwards if they mattered.

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_idsYesIds of the tags to merge away
new_nameYesName of the new tag. Must not exist yet.
confirm_tokenNoConfirmation token from a previous call of this tool with the same arguments. Omit on the first call.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that source tags are destroyed (consistent with destructiveHint: true), explains that archival settings are lost, and mentions the confirmation token pattern. This goes well beyond what the annotation provides, offering complete behavioral transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two brief paragraphs: the first clearly states the core operation, the second adds essential caveats. Every sentence adds value, with no fluff or repetition. Highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's effect, critical constraints, and a usage pattern (confirm_token). It lacks explicit mention of return values or response format, which would be helpful given no output schema, but overall it provides sufficient context for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are well-documented there. The description reiterates the new_name uniqueness requirement but adds no deeper semantic detail beyond what the schema already says (e.g., confirm_token explanation is identical). Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: folding multiple tags into one new tag, with source tags deleted and links reassigned. It uses specific verbs and resources, and the purpose is well-distinguished from sibling tools like rename_tag or delete_tags.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage constraints: new_name must not already exist, and archival settings are not preserved, directing users to create_tags for re-setting them. It lacks explicit comparison to alternatives (e.g., when to use merge_tags vs. rename_tag), but the guidance is still strong and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rename_tagRename a tagA
Idempotent

Renames a tag; every link carrying it keeps it. Tag names are unique per account, so renaming a tag to a name that already exists fails — use merge_tags to fold two tags into one instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesNew tag name
tag_idYesNumeric id of the tag — the "id" field returned by list_tags

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true. The description adds meaningful behavioral context: 'every link carrying it keeps it' and details the failure condition for duplicate names. No annotation contradiction present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two sentences. The first sentence states the action and effect, and the second adds the constraint and alternative. Every sentence serves a clear purpose and is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with no output schema, the description covers the purpose, side effects (link preservation), failure mode, and alternative tool. It is fully sufficient for correct agent behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with both parameters having descriptions in the input schema. The description does not add additional meaning to the parameters beyond what the schema already provides, so a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Renames a tag' with a specific verb and resource. It distinguishes itself from sibling tools like merge_tags by explicitly explaining the uniqueness constraint and pointing to merge_tags for folding tags instead of renaming.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when not to use the tool (when the new name already exists, which causes failure) and directly names the alternative: 'use merge_tags to fold two tags into one instead'. This is clear context for agent decision-making.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_collectionUpdate a collectionA
Idempotent

Changes a collection. Fields that are not given stay as they are: the tool reads the collection first and merges, because the underlying route rebuilds the member list from the request body and would otherwise remove every collaborator.

Only the owner of a collection may update it. To move a collection to the top level pass parent_id=0 — Linkwarden needs an explicit marker for that and ignores null.

Setting is_public=true needs a confirmation token: it makes the collection and every link in it readable by anyone who has the URL, without logging in.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
colorNo
is_publicNotrue publishes the collection to anyone with the link (needs confirmation), false makes it private again
parent_idNoId of the new parent collection, or 0 to move this collection to the top level
descriptionNo
collection_idYesNumeric id of the collection — the "id" field returned by list_collections
confirm_tokenNoConfirmation token from a previous call of this tool with the same arguments. Omit on the first call.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations include idempotentHint=true, and description adds critical behavioral details: the tool reads first then merges to avoid removing collaborators, explains parent_id=0 behavior, and warns about is_public=true needing confirmation token. No contradiction with annotations. Minor gap: doesn't describe rate limits or reversal possibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short, front-loaded paragraphs. Every sentence provides necessary context—no fluff. Uses bullet-like formatting with line breaks for readability. Perfect length for this complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite 7 parameters and no output schema, the description covers key behavioral aspects (merging, owner restriction, top-level move, public confirmation). Minor gap: does not describe return value or error cases, but acceptable given output schema is not required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 57%, and description significantly adds meaning: explains parent_id=0 behavior beyond schema, describes confirm_token purpose and usage pattern, clarifies is_public implication ('every link in it readable by anyone'). More details on color and description would be helpful.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Changes a collection' and explains the behavior of non-provided fields, distinguishing it from create_collection or delete_collection siblings. It gives specific verb+resource pairing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description provides clear usage context: who can use it (only owner), how to move to top level (parent_id=0), and confirmation token requirement for public visibility. However, it does not explicitly mention when to use this tool over alternatives like update_link or delete_collection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev0.2.0
    • Changedcreate_tags12 fields changed
      • removedInput schema / properties / ai_tag / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / ai_tag / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / archive_as_monolith / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / archive_as_monolith / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / archive_as_pdf / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / archive_as_pdf / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / archive_as_readable / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / archive_as_readable / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / archive_as_screenshot / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / archive_as_screenshot / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedInput schema / properties / archive_as_wayback_machine / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / archive_as_wayback_machine / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
  2. 28 tool updatesv0.1.2
    • First observedbulk_delete_links
    • First observedbulk_update_links
    • First observedcreate_collection
    • First observedcreate_link
    • First observedcreate_rss_subscription
    • First observedcreate_tags
    • First observeddelete_collection
    • First observeddelete_link
    • First observeddelete_link_preservations
    • First observeddelete_rss_subscription
    • First observeddelete_tags
    • First observedget_collection
    • First observedget_current_user
    • First observedget_dashboard
    • First observedget_link
    • First observedget_link_content
    • First observedget_tag
    • First observedget_worker_stats
    • First observedlist_collections
    • First observedlist_rss_subscriptions
    • First observedlist_tags
    • First observedmerge_tags
    • First observedrename_tag
    • First observedrepreserve_link
    • First observedsearch_links
    • First observedset_link_pinned
    • First observedupdate_collection
    • First observedupdate_link

TDQS

A4.2/5.0

Scored across 28 tools

Disambiguation5/5

Every tool targets a distinct resource/action combination: reads are list/get, mutations are create/update/delete, bulk operations carry a bulk_ prefix, and preservation/RSS/pinning have dedicated verbs. Near-neighbor tools like delete_link vs delete_link_preservations are clearly separated by their nouns and descriptions.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern, with list/get for reads, create/update/delete for writes, bulk_ for multi-item operations, and set_/represerve_/merge_ for special actions. The singular/plural distinction between single-item and bulk tools reinforces the pattern rather than breaking it.

Tool Count3/5

28 tools is on the heavy side and exceeds the typical comfortable range, though the set covers several distinct subdomains: links, preservation, collections, tags, RSS, and account/worker status. No tool is pure filler, but the count feels more like a full API wrapper than a tightly scoped MCP server.

Completeness5/5

The tool surface provides full lifecycle coverage for links, collections, and tags, plus bulk operations, preservation controls, RSS subscription management, and background-worker monitoring. There are no obvious dead ends: search_links covers listing, get_link_content reads archived text, and represerve_link/delete_link_preservations handle preservation lifecycle.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    Enables managing bookmarks via the Linkwarden API with token-frugal tools for listing collections and links, adding/moving/deleting links, and creating collections.
    7
    -
  • A
    license
    B
    quality
    D
    maintenance
    Enables management of Raindrop.io bookmarks, collections, tags, and highlights via MCP tools, with support for search, bulk editing, and library auditing.
    17
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables users to search, read, and query saved bookmark content via a read-only MCP interface, with full-text and optional semantic search.
    4
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server for Linkwarden bookmarks providing read-first search and preserved content access with opt-in write, delete, and collection-delete tools, plus heuristic triage workflows.
    46 npm
    1
    MIT