Bowrd MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Bowrd MCP Serverpin this image to my recipes board: https://example.com/cake.jpg"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Bowrd MCP Server
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 |
| List all boards with IDs, names, slugs, descriptions, and pin counts. | None |
| Create a new board. |
|
| List pins/entries from Bowrd, optionally filtered by board. |
|
| Retrieve full details of a single pin by ID or UUID. |
|
| Pin an image to a board. Bowrd automatically downloads and stores the media. |
|
| Update an existing pin (edit title, description, content warning, tags, move board, or visibility). |
|
| Search through your pins by keyword in title, description, or source URL. |
|
| Scrape a webpage to find images, title, and description using Bowrd's image finder. |
|
Related MCP server: pinterest-mcp-server
Quickstart
1. Prerequisites
Node.js
>= 18A running self-hosted Bowrd instance with the API bridge enabled (see Bowrd Backend Setup below).
2. Installation & Build
git clone https://github.com/Robert-SD/bowrd-mcp.git
cd bowrd-mcp
npm install
npm run build3. Environment Configuration
Copy .env.example to .env:
cp .env.example .envSet your Bowrd URL and secret API token:
BOWRD_URL=https://your-bowrd-domain.com
BOWRD_API_TOKEN=your_generated_mcp_tokenClient 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-mcpMake 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.phpStep 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 -dDevelopment
# Run with live TypeScript execution
npm run dev
# Compile TypeScript
npm run buildLicense
This project is licensed under the MIT License.
Available Tools
8 toolsbowrd_create_boardB
Create a new board in Bowrd for organizing visual bookmarks.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the board (e.g. 'Interior Design', 'App UI Ideas') | |
| is_public | No | Whether the board is public (default: true) | |
| description | No | Optional description explaining the board's theme |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It says 'Create' but omits permissions/auth requirements, side effects, visibility consequences, and what is returned after creation, leaving a mutation tool largely opaque.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler words; every part of it contributes to identifying the action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter create tool with full schema coverage and no output schema, the description is adequate but thin. With no annotations, it should at least note the mutation's effect or visibility behavior, which it does not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter (name, is_public, description) well documented including a default and examples. The description adds no parameter meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Create') and resource ('board') plus its purpose (organizing visual bookmarks), which clearly separates it from sibling entry tools like bowrd_create_entry. It stops short of explicit sibling differentiation, but the resource distinction is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as bowrd_create_entry, nor any mention of prerequisites or context. The agent must infer usage entirely from the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bowrd_create_entryB
Create a new pin/entry in Bowrd. Automatically downloads the image to Bowrd storage and attaches it to the specified board.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Optional list of tags (e.g. ['architecture', 'minimalism']) | |
| title | Yes | Title of the pin/entry | |
| board_id | Yes | The ID of the board to add this pin to | |
| image_url | Yes | Direct URL to the image | |
| is_public | No | Whether the pin is publicly visible | |
| source_url | No | Source webpage where the image was found | |
| description | No | Optional notes or description for the pin |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It usefully reveals a non-obvious side effect — the image is downloaded and stored in Bowrd rather than merely referenced — but says nothing about authentication, failure modes for unreachable URLs, or what is returned after creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and followed by the side effect. No filler, no repetition of the title or name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter creation tool with no output schema and no annotations, the description covers the action but not the outcome — it never says an entry ID or object is returned for later use with bowrd_get_entry or bowrd_update_entry, nor that is_public defaults to true. Adequate but with clear gaps for a write operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 already documented in the schema, which sets the baseline at 3. The description adds no syntax, format, or constraint detail (e.g., that image_url must be a directly fetchable URI) beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Create a new pin/entry in Bowrd') plus a key side effect. It is clear on its own, but it never distinguishes itself from adjacent siblings such as bowrd_scrape_images_from_url, which also handles images pulled from URLs, so an agent could confuse the two.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention that board_id must first come from bowrd_list_boards or bowrd_create_board, and no stated alternatives or exclusions. The agent must infer all routing from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bowrd_get_entryB
Retrieve detailed information about a single pin/entry by its ID or UUID.
| Name | Required | Description | Default |
|---|---|---|---|
| entry_id | Yes | The numerical ID or UUID string of the entry |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Retrieve' implies a read, but the description says nothing about behavior on a missing/invalid ID, auth or permission needs, or rate limits, leaving meaningful gaps for even a simple lookup tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with no filler; the resource and lookup key come first. Slightly muddied by the 'pin/entry' terminology doubling, which is the only reason it isn't a clean 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A one-parameter lookup is nearly self-explanatory, and there are no nested objects. However, with no output schema, the description's 'detailed information' never hints at what is returned or which identifier form to prefer, leaving minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single entry_id parameter is fully documented as numeric ID or UUID, so baseline 3 applies. The description merely restates the same 'ID or UUID' duality without adding format or resolution details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource: 'Retrieve detailed information about a single pin/entry by its ID or UUID.' The word 'single' and 'by its ID' implicitly separate it from list/search siblings, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: an agent infers this is the tool for fetching one known entry, versus bowrd_search_entries or bowrd_list_entries. No explicit when-to-use, when-not-to-use, or alternative routing is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bowrd_list_boardsA
List all boards in Bowrd with their ID, name, slug, description, and pin counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden, and it does add value by listing the exact fields returned (ID, name, slug, description, pin counts). However, it says nothing about pagination, ordering, result limits, or permissions, which are the traits an agent needs for a 'list all' tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. The verb and resource come first and the return-field detail follows immediately, so every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description usefully compensates by enumerating the returned fields. It is close to complete for a zero-parameter list tool, though pagination and ordering behavior are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies; there is no parameter semantics for the description to clarify or omit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('all boards in Bowrd'), and enumerates the returned fields, so the agent knows exactly what it retrieves. It does not explicitly distinguish itself from siblings like bowrd_search_entries or bowrd_create_board, but the scope ('all boards') is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the tool for enumerating boards rather than entries or a search. There is no explicit when-to-use statement, no mention of alternatives, and no prerequisites (e.g. auth) called out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bowrd_list_entriesC
List pins/entries from Bowrd, optionally filtered by a specific board ID.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of entries to return (default: 20) | |
| board_id | No | Optional board ID to filter entries by |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'List' implies a read operation, but it says nothing about ordering, pagination behavior, whether the default limit is applied, or what happens when board_id is omitted. For a tool with zero annotation coverage this is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single clean sentence with the resource front-loaded and the optional filter trailing. Nothing is wasted, though it is thin enough that it leaves obvious questions unanswered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-optional-parameter list tool with a fully documented schema and no output schema, this is minimally adequate. It is missing sibling differentiation (search_entries), return shape, and pagination/ordering context, which the agent would otherwise need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (limit, board_id) are already fully documented in the schema. The description restates board_id filtering but adds no format, range, or interaction detail beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 from Bowrd') with an optional filter scope. It does not distinguish itself from the sibling bowrd_search_entries, so an agent cannot tell from the description alone which listing tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes optional board filtering but gives no when-to-use guidance, no exclusions, and never mentions the alternative bowrd_search_entries for filtered queries. Usage must be inferred from the name and sibling list.
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_urlC
Scrape a webpage URL to automatically find images, title, and description using Bowrd's image finder service.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The webpage URL to scrape for images |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and largely fails: it doesn't say whether results are read-only, whether an external fetch/rate limit applies, whether images are downloaded or merely listed as URLs, or how failures surface. 'Using Bowrd's image finder service' is the only extra context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with no filler; the action and the extracted fields come first. It is efficient, though it could carry one more clause of guidance without becoming bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description must cover behavior; it at least names the return fields (images, title, description), which is genuinely informative. However, for a web-scraping tool it omits failure modes, auth, and whether image assets are fetched or just referenced.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single url parameter is fully documented in the schema itself. The description adds no format, constraint, or redirect-handling detail beyond 'the webpage URL to scrape', so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Scrape') and resource ('a webpage URL') and names the outputs it extracts (images, title, description), which is more than a tautology. It doesn't explicitly contrast itself with the board/entry CRUD siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to reach for this tool versus the entry-creation siblings, nor whether its output is meant to feed bowrd_create_entry. The agent gets no conditions or exclusions, only a statement of what it does.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bowrd_search_entriesB
Search through your Bowrd pins by matching keywords in title, description, or source URL.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results to return | |
| query | Yes | Keyword or phrase to search for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It usefully discloses which fields are matched (title, description, source URL), which is genuine behavioral context, but it never states that this is a read-only operation, how results are ordered, or anything about pagination or limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. The search scope is stated immediately and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only search with no output schema, the essentials are covered, but the description omits result ordering, truncation/limit behavior, and any note that results are read-only. It is minimally adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both the query and limit parameters are already documented in the schema, including the default and max. The description adds nothing about query syntax (exact phrase, boolean, case sensitivity) or how limit interacts with results, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (Bowrd pins/entries) and specifies the matchable fields (title, description, source URL). It is distinguishable from bowrd_list_entries by implication (keyword search vs. enumeration), though it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no mention of the list_entries alternative, and no prerequisites or exclusions. The keyword-matching detail implies usage, but nothing tells the agent when search is preferable to listing or fetching a single entry.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bowrd_update_entryA
Update an existing pin/entry (edit title, description, content warning, tags, change visibility, or move to another board).
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Replacement list of tags (e.g. ['fashion', 'autumn']) | |
| title | No | New title for the entry | |
| board_id | No | ID of the board to move this entry to | |
| entry_id | Yes | The numerical ID or UUID string of the entry to update | |
| is_public | No | Whether the entry is publicly visible | |
| description | No | New description or notes for the entry | |
| content_warning | No | Optional content warning / spoiler tag |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the mutation scope (title, description, content warning, tags, visibility, board) and implies a partial update rather than full replacement, but says nothing about permissions, whether changes are reversible, how omitted fields behave, or what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the action and target first and the editable fields in a compact parenthetical. No filler, no repetition of schema text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a 7-parameter mutation tool with a fully documented schema and no output schema, but because there are no annotations the description should have covered authorization needs, partial-update semantics, and error behavior, which it omits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the 7 parameters is already documented in the schema, including the entry_id ID/UUID duality. The description's field list merely restates those parameters and adds no format or constraint detail, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (update) plus resource (pin/entry), with an enumerated list of editable attributes and the qualifier 'existing', which implicitly distinguishes it from bowrd_create_entry. It never names a sibling tool explicitly, so it stays short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Update an existing pin/entry' implies the precondition that the entry must already exist and that creation is handled elsewhere, but there is no explicit when-to-use/when-not guidance, no mention of required permissions, and no pointer to alternatives such as bowrd_create_entry or 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.
8 tool updates
v1.1.0- First observed
bowrd_create_board - First observed
bowrd_create_entry - First observed
bowrd_get_entry - First observed
bowrd_list_boards - First observed
bowrd_list_entries - First observed
bowrd_scrape_images_from_url - First observed
bowrd_search_entries - First observed
bowrd_update_entry
TDQS
Scored across 8 tools
Each tool has a clearly distinct purpose: listing boards vs entries, creating boards vs entries, getting/updating entries, searching, and scraping. No overlapping functionality is apparent.
All tool names follow a consistent verb_noun pattern with the 'bowrd_' prefix (e.g., bowrd_list_boards, bowrd_create_entry). This is predictable and easy to understand.
With 8 tools, the server is well-scoped: it covers essential operations for boards and entries without unnecessary bloat. This is an appropriate size for a bookmarking service.
The surface covers CRUD for entries and creation/listing for boards, plus search and scrape. However, it lacks board update/delete and entry delete, which are minor gaps that agents might need.
Maintenance
Related MCP Connectors
Save and organize web finds in persistent, user-controlled collections for AI assistants.
- pinsuiteOAuthapp.pinsuite
Download and save Pinterest boards, Instagram posts and web pages into a library you own.
Personal wiki and memory layer for AI assistants. Persistent, structured memory across sessions.
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI assistants to save, search, and manage bookmarks with semantic search, automatic metadata extraction, and optional LLM-powered enrichment, all running locally.86MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with the Pinterest API, allowing management of boards and pins through natural language commands.108 npm27MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to manage Pinterest boards and pins, create and update pins, and track analytics via the Pinterest API v5.4MIT
- AlicenseBqualityBmaintenanceEnables image search and information retrieval from Pinterest using the Model Context Protocol. Supports searching by keywords, getting similar pins, and downloading images directly.5108 npmMIT