Skip to main content
Glama

Bowrd MCP Server

License: MIT MCP

A Model Context Protocol (MCP) server for Bowrd — the minimalist, self-hosted visual bookmarking platform and Pinterest alternative with ActivityPub / Fediverse integration.

This server enables AI assistants (Claude Desktop, Cursor, Antigravity, OpenClaw, Hermes, etc.) to browse your boards, search bookmarks, scrape images from the web, and pin visual inspirations directly into your Bowrd instance.


Features & Tools

Tool

Description

Parameters

bowrd_list_boards

List all boards with IDs, names, slugs, descriptions, and pin counts.

None

bowrd_create_board

Create a new board.

name (required), description (optional), is_public (default: true)

bowrd_list_entries

List pins/entries from Bowrd, optionally filtered by board.

board_id (optional), limit (1-50, default: 20)

bowrd_get_entry

Retrieve full details of a single pin by ID or UUID.

entry_id (required)

bowrd_create_entry

Pin an image to a board. Bowrd automatically downloads and stores the media.

board_id (required), title (required), image_url (required), source_url (optional), description (optional), tags (optional array), is_public (default: true)

bowrd_update_entry

Update an existing pin (edit title, description, content warning, tags, move board, or visibility).

entry_id (required), title (optional), description (optional), board_id (optional), tags (optional array), is_public (optional), content_warning (optional)

bowrd_search_entries

Search through your pins by keyword in title, description, or source URL.

query (required), limit (default: 20)

bowrd_scrape_images_from_url

Scrape a webpage to find images, title, and description using Bowrd's image finder.

url (required)


Related MCP server: pinterest-mcp-server

Quickstart

1. Prerequisites

2. Installation & Build

git clone https://github.com/Robert-SD/bowrd-mcp.git
cd bowrd-mcp
npm install
npm run build

3. Environment Configuration

Copy .env.example to .env:

cp .env.example .env

Set your Bowrd URL and secret API token:

BOWRD_URL=https://your-bowrd-domain.com
BOWRD_API_TOKEN=your_generated_mcp_token

Client Integration

Claude Desktop

Add this to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json on macOS or %APPDATA%\Claude\claude_desktop_config.json on Windows):

{
  "mcpServers": {
    "bowrd": {
      "command": "npx",
      "args": ["-y", "bowrd-mcp"],
      "env": {
        "BOWRD_URL": "https://your-bowrd-domain.com",
        "BOWRD_API_TOKEN": "your_generated_mcp_token"
      }
    }
  }
}

(If running from local source clone, replace "command": "npx", "args": ["-y", "bowrd-mcp"] with "command": "node", "args": ["/path/to/bowrd-mcp/dist/index.js"])

Cursor

Add to .cursor/mcp.json in your workspace or global settings:

{
  "mcpServers": {
    "bowrd": {
      "command": "npx",
      "args": ["-y", "bowrd-mcp"],
      "env": {
        "BOWRD_URL": "https://your-bowrd-domain.com",
        "BOWRD_API_TOKEN": "your_generated_mcp_token"
      }
    }
  }
}

Google Antigravity (agy)

Install directly via the Antigravity plugin manager:

agy plugin install https://github.com/Robert-SD/bowrd-mcp

Make sure BOWRD_URL and BOWRD_API_TOKEN are set in your environment.

Safety & Guardrails

  • Non-Destructive Operations: To protect your visual library from unintended AI hallucination or accidental mass deletion, Bowrd MCP deliberately exposes strictly additive, reading, and searching tools. Deletions cannot be performed via MCP.


Bowrd Backend Setup

As upstream Bowrd does not currently ship with an official REST API, this MCP server pairs with a lightweight API bridge controller included in laravel/McpApiController.php.

Step 1: Copy Controller

Copy laravel/McpApiController.php into your Bowrd project directory:

cp laravel/McpApiController.php <path-to-bowrd>/app/Http/Controllers/McpApiController.php

Step 2: Register API Routes

Add the following to <path-to-bowrd>/routes/web.php:

use App\Http\Controllers\McpApiController;

Route::prefix('api/mcp')->group(function () {
    Route::get('/boards', [McpApiController::class, 'boards']);
    Route::post('/boards', [McpApiController::class, 'createBoard']);
    Route::get('/entries', [McpApiController::class, 'entries']);
    Route::get('/entries/{id}', [McpApiController::class, 'entry']);
    Route::post('/entries', [McpApiController::class, 'createEntry']);
    Route::put('/entries/{id}', [McpApiController::class, 'updateEntry']);
    Route::patch('/entries/{id}', [McpApiController::class, 'updateEntry']);
    Route::get('/search', [McpApiController::class, 'search']);
    Route::post('/fetch-images', [McpApiController::class, 'fetchImages']);
});

Step 3: Exclude from CSRF Protection

In <path-to-bowrd>/bootstrap/app.php (Laravel 11+), ensure api/* is excluded from CSRF verification:

->withMiddleware(function (Middleware $middleware) {
    $middleware->validateCsrfTokens(except: [
        'api/*',
        '@*/inbox',
    ]);
})

Step 4: Configure Token in .env

Add an MCP token to your Bowrd .env:

MCP_API_TOKEN=your_secure_random_token_here

(Optionally specify ADMIN_EMAIL=user@example.com if you want API actions explicitly tied to a specific account).

Restart or rebuild your Bowrd container stack:

docker compose up -d

Development

# Run with live TypeScript execution
npm run dev

# Compile TypeScript
npm run build

License

This project is licensed under the MIT License.

Available Tools

8 tools
bowrd_create_boardCreate BoardB

Create a new board in Bowrd for organizing visual bookmarks.

NameRequiredDescriptionDefault
nameYesThe name of the board (e.g. 'Interior Design', 'App UI Ideas')
is_publicNoWhether the board is public (default: true)
descriptionNoOptional description explaining the board's theme

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already declare this is a non-read-only, non-destructive mutation, so the safety profile is covered. The description adds essentially no behavioral context: no mention of who can create boards, whether the board is owned by the caller, or what happens with the default public visibility.

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?

A single front-loaded sentence with zero filler; nothing is repeated from the schema or annotations.

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?

For a simple 3-parameter create tool with full schema coverage and no output schema, the minimum needed is present. However, an agent gets no signal about return value shape (e.g. whether the new board ID comes back) or post-creation 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 description coverage is 100%, with all three parameters documented in the schema including the is_public default. The description adds no parameter meaning beyond that, so the baseline of 3 applies.

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?

States a specific verb and resource ("Create a new board") plus a scope note about what boards are for ("organizing visual bookmarks"). It is distinguishable from the entry-focused siblings by resource, though it never names them explicitly.

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

Usage Guidelines2/5

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

No guidance on when to use this versus alternatives — nothing about checking bowrd_list_boards for duplicates first, or how a board relates to bowrd_create_entry. The intended use is inferable from the name only.

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

bowrd_create_entryCreate Entry (Pin Image)A

Create a new pin/entry in Bowrd. Automatically downloads the image to Bowrd storage and attaches it to the specified board.

NameRequiredDescriptionDefault
tagsNoOptional list of tags (e.g. ['architecture', 'minimalism'])
titleYesTitle of the pin/entry
board_idYesThe ID of the board to add this pin to
image_urlYesDirect URL to the image
is_publicNoWhether the pin is publicly visible
source_urlNoSource webpage where the image was found
descriptionNoOptional notes or description for the pin

TDQS

A3.7/5.0
Behavior4/5

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

Annotations only state readOnly=false and destructive=false. The description adds genuinely useful behavior beyond that: the image is fetched and copied into Bowrd storage rather than merely linked. It still omits error cases (invalid or unreachable URL, duplicate entries) and the public-visibility default, but the main side effect is disclosed.

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, front-loaded with the action and followed by the key side effect. Nothing is repeated and nothing is wasted.

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?

For a create tool with seven parameters, the description covers the core action and the storage side effect but says nothing about the result (e.g., whether an entry ID is returned) or failure modes. With no output schema, some note on the return value would help.

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 all seven parameters are documented in the schema, including defaults like is_public=true. The description adds little parameter-level meaning beyond 'the specified board', so the baseline of 3 applies.

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 a specific verb and resource ('Create a new pin/entry in Bowrd') and adds the non-obvious effect that the image is downloaded and attached to a board. It does not distinguish itself from siblings such as bowrd_scrape_images_from_url or bowrd_create_board, so an agent still has to infer the boundary.

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?

Usage is implied: create a pin on an existing board with an image URL. There is no explicit guidance on when to use this versus bowrd_scrape_images_from_url (which presumably yields image URLs to feed here) or what prerequisites exist, such as the board already existing.

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

bowrd_get_entryGet EntryA
Read-only

Retrieve detailed information about a single pin/entry by its ID or UUID.

NameRequiredDescriptionDefault
entry_idYesThe numerical ID or UUID string of the entry

TDQS

A3.6/5.0
Behavior3/5

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

The readOnlyHint annotation already makes clear this is a safe read operation. The description adds that it returns 'detailed information' for one entry, but does not describe error behavior, what fields are included, or any authorization requirements beyond what the annotation provides.

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?

It is a single, front-loaded sentence with no wasted words. The verb, resource, and lookup key are presented immediately.

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 simple one-parameter read-only getter with full schema coverage and no output schema, the description gives enough to invoke it correctly. It could be slightly more complete by mentioning what 'detailed information' includes or how missing entries are handled, but those gaps are minor.

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 entry_id parameter is already documented as a numerical ID or UUID string. The description reinforces that lookup is by ID or UUID, but adds no syntax, format, or resolution details beyond the schema.

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 a specific verb and resource: 'Retrieve detailed information about a single pin/entry by its ID or UUID.' It distinguishes this from list/search siblings by emphasizing a single entry looked up by identifier, though it does not explicitly name the sibling tools it differs from.

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 appropriate use case: fetching one known entry by ID or UUID. However, it does not explicitly say when to use this instead of bowrd_search_entries or bowrd_list_entries, nor does it mention prerequisites such as first resolving an ID.

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

bowrd_list_boardsList BoardsA
Read-only

List all boards in Bowrd with their ID, name, slug, description, and pin counts.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read. The description adds that it returns every board and which fields are included, which is valuable since there is no output schema, but it says nothing about ordering, pagination, or behavior for an empty workspace.

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?

A single sentence with no padding, and the returned field list is front-loaded right after the action. Nothing is redundant.

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?

With no output schema and no parameters, the description carries the return-value burden and does so by enumerating ID, name, slug, description, and pin counts. Only ordering/results-limit behavior is left unstated, a minor gap for a simple list 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?

The tool takes no parameters, so there is nothing to disambiguate; baseline 4 applies. The description correctly avoids inventing or implying filtering options.

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?

States a specific verb and resource ('List all boards in Bowrd') and immediately names what comes back. It does not explicitly contrast with siblings, though the board-vs-entry split in the sibling names makes the distinction reasonably obvious.

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?

There is no explicit when-to-use guidance or statement of exclusions, but for a zero-parameter listing tool the usage is strongly implied: call it to discover boards and their IDs. No alternative is named (e.g., create_board is a write, so no real ambiguity).

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

bowrd_list_entriesList EntriesA
Read-only

List pins/entries from Bowrd, optionally filtered by a specific board ID.

NameRequiredDescriptionDefault
limitNoMaximum number of entries to return (default: 20)
board_idNoOptional board ID to filter entries by

TDQS

A3.5/5.0
Behavior3/5

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

readOnlyHint=true already declares the safe read profile, so the description's burden is lower. It adds little beyond naming the resource and optional filtering; it does not comment on default result volume (limit default 20 / max 50) or pagination behavior that an agent might want when listing a whole board.

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?

A single front-loaded sentence with no filler; the optional filter is mentioned last where it belongs. Nothing is wasted.

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?

For a simple two-optional-parameter read tool with annotations covering safety and no output schema, this is minimally adequate. It omits routing guidance against the search sibling, which is the main remaining 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%, so both limit and board_id are fully documented in the schema. The description only restates the board_id filter, adding no syntax or format detail, so the baseline 3 applies.

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?

States a specific verb (List) and resource (pins/entries) with a clear scope note ('from Bowrd'), so an agent knows it's a retrieval tool. However, it does not differentiate itself from the close sibling bowrd_search_entries, leaving ambiguity about which to call.

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 phrase 'optionally filtered by a specific board ID' implies one usage mode, but there is no explicit statement of when to use this versus bowrd_search_entries or when not to use it. Guidance is inferred rather than stated.

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

bowrd_scrape_images_from_urlScrape Images From URLA
Read-only

Scrape a webpage URL to automatically find images, title, and description using Bowrd's image finder service.

NameRequiredDescriptionDefault
urlYesThe webpage URL to scrape for images

TDQS

A3.8/5.0
Behavior4/5

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

While annotations cover the read-only nature of the call, the description adds valuable operational context by disclosing *what* the tool finds (images, title, description) and *how* it operates (using Bowrd's image finder service). This is information beyond the standard schema/annotations.

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 definition is extremely concise, conveying the complete purpose, scope, and mechanism in a single, efficient sentence.

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 simple, read-only scraping operation, it is reasonably complete. By mentioning the output fields (images, title, description), it gives the agent a strong indication of the data it will receive.

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 coverage is 100%, setting a baseline of 3. The description reinforces that the URL must be a webpage intended for content scraping, adding minor semantic context beyond the required string type.

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 (Scrape), the resource (webpage URL), and the specific data extracted (images, title, and description). It distinguishes itself by specifying the use of 'Bowrd's image finder service'.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this scraping tool versus the other content management siblings (e.g., bowrd_get_entry or bowrd_list_boards). It does not suggest any preconditions or use cases.

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

bowrd_search_entriesSearch EntriesA
Read-only

Search through your Bowrd pins by matching keywords in title, description, or source URL.

NameRequiredDescriptionDefault
limitNoMaximum results to return
queryYesKeyword or phrase to search for

TDQS

A3.7/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes the safe read behavior, so the description's main added value is clarifying which fields are searched. It does not describe pagination behavior, result ordering, or rate limits, but the annotation covers the primary safety concern.

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, front-loaded sentence that states the core action and matching scope with 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?

For a simple read-only search tool with fully documented parameters and no output schema, the description provides enough context to call it correctly. It could add minor details such as result ordering, but nothing essential is missing.

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 description coverage is 100%, so the schema already documents both parameters. The description adds useful meaning to the query parameter by stating that keywords match title, description, or source URL; it does not further clarify the limit parameter.

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 uses a clear verb (search) and resource (Bowrd pins/entries) and specifies the keyword-matching scope across title, description, and source URL. It distinguishes itself implicitly from list_entries by focusing on keyword matching, but does not explicitly name or contrast with that sibling.

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 usage is implied: use this tool when searching for pins by keyword. However, it does not explicitly state when to use this instead of list_entries or get_entry, nor does it give exclusions or alternative-selection guidance.

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

bowrd_update_entryUpdate EntryB
Destructive

Update an existing pin/entry (edit title, description, content warning, tags, change visibility, or move to another board).

NameRequiredDescriptionDefault
tagsNoReplacement list of tags (e.g. ['fashion', 'autumn'])
titleNoNew title for the entry
board_idNoID of the board to move this entry to
entry_idYesThe numerical ID or UUID string of the entry to update
is_publicNoWhether the entry is publicly visible
descriptionNoNew description or notes for the entry
content_warningNoOptional content warning / spoiler tag

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, so the agent knows this is a risky mutation. The description adds that visibility can be changed and entries moved across boards (both consequential), but it never says whether omitted fields are preserved or cleared, nor what the response looks like — a meaningful gap for a destructive tool.

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?

A single front-loaded sentence with a compact parenthetical field list; nothing is padded. It is dense but readable and appropriately sized for the tool.

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?

With annotations covering the safety profile and a fully described schema, the definition supplies enough to call the tool correctly. The only residual gaps are patch-vs-replace semantics and return value, which the absence of an output schema makes minor.

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 every parameter is already documented, and the description merely restates the same field list (title, description, content warning, tags, visibility, board). Baseline 3 applies since the schema carries the semantics and the description adds no format or partial-update detail.

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?

States a specific verb (Update) and resource (pin/entry) and enumerates the mutable fields, which cleanly separates it from bowrd_create_entry and bowrd_get_entry. It stops short of naming a sibling it is not, so it is clear but not maximally differentiated.

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

Usage Guidelines2/5

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

No explicit when-to-use or when-not-to-use guidance; 'existing' only weakly implies that an entry_id must already exist. Nothing tells the agent to prefer bowrd_create_entry for new pins or how this differs from a read via bowrd_get_entry.

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. 8 tool updatesv1.2.0
    • Changedbowrd_create_board1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedbowrd_create_entry1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedbowrd_get_entry1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedbowrd_list_boards1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedbowrd_list_entries1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedbowrd_scrape_images_from_url1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedbowrd_search_entries1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedbowrd_update_entry1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  2. 8 tool updatesv1.1.0
    • First observedbowrd_create_board
    • First observedbowrd_create_entry
    • First observedbowrd_get_entry
    • First observedbowrd_list_boards
    • First observedbowrd_list_entries
    • First observedbowrd_scrape_images_from_url
    • First observedbowrd_search_entries
    • First observedbowrd_update_entry

TDQS

A3.7/5.0

Scored across 8 tools

Disambiguation5/5

Each tool has a clearly distinct resource and action: search vs. list entries are separated by keyword search versus board-filtered listing, and entry operations are distinct from board operations. The scrape tool is also clearly unique as a URL extraction helper.

Naming Consistency5/5

All tools follow the same bowrd_ prefix plus snake_case verb_noun pattern: search_entries, list_boards, create_board, list_entries, create_entry, get_entry, update_entry. Scrape_images_from_url is slightly longer but still obey the same convention.

Tool Count5/5

Eight tools is well-scoped for a visual bookmarking server covering boards and pins. Each tool occupies a distinct role without excessive surface area.

Completeness3/5

Entry lifecycle is mostly covered with create, list, search, get, and update, but delete is missing. Boards only have list and create, with no get, update, or delete operations, leaving notable gaps for board management.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to save, search, and manage bookmarks with semantic search, automatic metadata extraction, and optional LLM-powered enrichment, all running locally.
    8
    6
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to manage Pinterest boards and pins, create and update pins, and track analytics via the Pinterest API v5.
    7
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Enables image search and information retrieval from Pinterest using the Model Context Protocol. Supports searching by keywords, getting similar pins, and downloading images directly.
    5
    88 npm
    MIT