SavePinner MCP
The SavePinner MCP server provides read-only, idempotent tools for parsing, validating, classifying, and normalizing Pinterest URLs—all without making outbound network requests, downloading media, or accepting non-HTTPS or lookalike domains.
parse_pinterest_url: Extracts the URL's kind (pin, short link, profile, board, or ideas), canonical and normalized forms, host, and type-specific identifiers such aspinId,ideaId,ideaSlug,shortcode,username, andboardSlug.normalize_pinterest_url: Converts any supported Pinterest URL to its canonical form and strips tracking parameters (e.g.,utm_source).is_pinterest_url: Returns a boolean indicating whether a given string is a valid, supported Pinterest URL.
It handles pins, pin.it shortened links, user profiles, boards, and ideas across Pinterest country domains, operating entirely locally via stdio or remote Streamable HTTP endpoints.
Provides tools for parsing, validating, classifying, and normalizing Pinterest URLs, supporting pin, pin.it, profile, board, and Ideas URL kinds across Pinterest country domains.
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., "@SavePinner MCPWhat kind of Pinterest URL is https://www.pinterest.com/pin/123456789/?"
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.
SavePinner MCP
An MCP server for parsing, validating, classifying, and normalizing Pinterest URLs. It supports local stdio and public Streamable HTTP. The tools make no outbound network requests and do not download media.
Tools
Tool | Purpose |
| Return the URL kind, canonical URL, host, and type-specific identifiers. |
| Convert a supported URL to canonical form and remove tracking parameters. |
| Check whether a value is a supported Pinterest URL. |
Supported URL kinds include Pin, pin.it, profile, board, and Ideas URLs across Pinterest country domains.
Related MCP server: @striderlabs/mcp-pinterest
Run
Node.js 18 or newer is required.
npx -y savepinner-mcpClient configuration
Add the server to an MCP client that supports local stdio servers:
{
"mcpServers": {
"savepinner": {
"command": "npx",
"args": ["-y", "savepinner-mcp"]
}
}
}Remote MCP
Connect any Streamable HTTP client to the public endpoint:
https://savepinner-pinterest-url-mcp.chenxuanshimo.workers.dev/mcpThe endpoint is read-only and does not require authentication.
The public Pinterest URL validation guide explains the validation and normalization boundaries used by the tools.
Docker
Build and run the server as a local stdio container:
docker build -t savepinner-mcp .
docker run --rm -i savepinner-mcpThe runtime image executes as the unprivileged node user and does not require secrets, volumes, or network access.
Example
Calling parse_pinterest_url with:
https://de.pinterest.com/pin/987654321/?utm_source=sharereturns:
{
"kind": "pin",
"originalUrl": "https://de.pinterest.com/pin/987654321/?utm_source=share",
"normalizedUrl": "https://www.pinterest.com/pin/987654321/",
"host": "de.pinterest.com",
"pinId": "987654321"
}Privacy and safety
URL processing is local to the running server.
The tools do not make outbound network requests.
The server does not download media.
Hostnames are checked against an exact Pinterest domain allow list.
Lookalike domains and non-HTTPS URLs are rejected.
The URL parser is provided by pinterest-url-normalizer.
This project is maintained by the team behind the Pinterest image downloader, a browser tool for inspecting media exposed by public Pinterest Pin URLs.
Pinterest is a trademark of Pinterest, Inc. This project is independent and is not affiliated with or endorsed by Pinterest.
Development
npm install
npm test
npm run worker:checkLicense
MIT
Connection diagnostics
Use the connection diagnostic guide to check transport, tool discovery, normalization and deceptive-host rejection before investigating media availability.
Available Tools
3 toolsis_pinterest_urlValidate Pinterest URLARead-onlyIdempotent
Return whether a value is a supported Pinterest URL without making a network request.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | A complete Pinterest or pin.it URL |
Output Schema
| Name | Required | Description |
|---|---|---|
| isPinterestUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description does not need to repeat those. It adds useful behavioral context by stating 'without making a network request,' which is not captured in the annotations. This conveys a key runtime behavior that helps the agent understand the tool's cost and side-effect profile.
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?
The description is a single, compact sentence that front-loads the primary behavior ('Return whether') and adds a key qualifier ('supported Pinterest URL') and a constraint ('without making a network request'). Every word earns its place; no wasted or redundant phrasing.
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 boolean validator with one parameter, the description is complete. It explains the core behavior, and the annotations cover safety and idempotency. An output schema exists, so return-value details are not needed. The tool's simplicity means no additional context is necessary for correct invocation.
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 schema has 100% description coverage for the 'url' parameter ('A complete Pinterest or pin.it URL'), so the baseline is 3. The description adds no further parameter semantics, but since the schema fully documents the single parameter, this is sufficient. No gap exists that the description must fill.
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 clearly states the tool's function: 'Return whether a value is a supported Pinterest URL.' This is a specific verb+resource combination that distinguishes it from sibling tools like parse_pinterest_url and normalize_pinterest_url, which perform different operations.
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 provides clear context for when to use this tool: 'without making a network request' suggests it is a lightweight, local validation. While it does not explicitly name alternatives, this context differentiates it from parsing or normalizing, which are distinct operations. No exclusions are mentioned, but the usage scope is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
normalize_pinterest_urlNormalize Pinterest URLARead-onlyIdempotent
Convert a supported Pinterest URL to its canonical form and remove tracking parameters.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | A complete Pinterest or pin.it URL |
Output Schema
| Name | Required | Description |
|---|---|---|
| normalizedUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds meaningful behavioral detail beyond those annotations by specifying that the tool removes tracking parameters and produces canonical form, which clarifies exactly what transformation occurs.
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?
The description is a single, front-loaded sentence that clearly states the tool's purpose and effect with zero wasted words. It is concise, scannable, and all information is relevant.
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, single-parameter transformation tool with rich annotations and an output schema, the description is complete. It explains what the tool does, satisfies the behavioral expectations, and does not need to elaborate on return values because the output schema is already provided.
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 schema already documents the single 'url' parameter with 100% coverage, including the requirement that it be a complete Pinterest or pin.it URL. The description adds a hint about 'supported' URLs but does not significantly extend beyond the schema-provided meaning, so a baseline score of 3 is appropriate.
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 clearly states the tool's function: converting a supported Pinterest URL to canonical form and removing tracking parameters. This specific verb+resource combination distinguishes it from siblings like parse_pinterest_url and is_pinterest_url, which have different purposes.
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 implies when to use the tool (when you need a canonical Pinterest URL without tracking parameters) but does not explicitly mention when not to use it or name alternative sibling tools. The context is clear but lacks direct exclusions or comparison to parse_pinterest_url or is_pinterest_url.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_pinterest_urlParse Pinterest URLARead-onlyIdempotent
Parse a Pinterest URL and return its kind, canonical URL, host, and type-specific identifiers.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | A complete Pinterest or pin.it URL |
Output Schema
| Name | Required | Description |
|---|---|---|
| host | Yes | |
| kind | Yes | |
| pinId | No | |
| ideaId | No | |
| ideaSlug | No | |
| username | No | |
| boardSlug | No | |
| shortcode | No | |
| originalUrl | Yes | |
| normalizedUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already identify the operation as read-only, idempotent, and non-destructive. The description adds behavioral detail about the return payload (kind, canonical URL, host, identifiers), which is helpful. No side effects or auth requirements are relevant given the read-only nature.
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?
The description is a single, well-structured sentence that leads with the action and resource, then lists the outputs. There is no redundant wording or unnecessary filler.
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?
With one simple parameter, a clear description, complete annotations, and an output schema, the description covers everything necessary for an agent to select and invoke the tool. The return values are enumerated, and the output schema can provide further structural detail.
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%—the 'url' parameter is described as 'A complete Pinterest or pin.it URL'. The tool description adds no further parameter detail beyond what the schema already provides, so the baseline score of 3 is appropriate.
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 clearly states a specific verb ('Parse') and resource ('Pinterest URL') and enumerates the outputs (kind, canonical URL, host, and type-specific identifiers). This differentiates it from sibling tools like is_pinterest_url (a boolean check) and normalize_pinterest_url (canonicalization).
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 implies usage—use this when you need structured components from a Pinterest URL—but it does not explicitly name alternatives or state when not to use it. The sibling tools are visible, but no direct comparison is provided.
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.
3 tool updates
v0.1.0- First observed
is_pinterest_url - First observed
normalize_pinterest_url - First observed
parse_pinterest_url
TDQS
Scored across 3 tools
Each tool serves a distinct purpose: one parses URLs, one normalizes them, and one validates them as Pinterest URLs. There is no overlap or ambiguity in their roles.
All tool names follow a consistent verb_object pattern: parse_pinterest_url, normalize_pinterest_url, is_pinterest_url. The pattern is predictable and uniform.
Three tools is exactly right for a focused URL utility server. Each tool addresses a specific need without clutter or redundancy.
The tool set covers the core operations for Pinterest URL handling: validation, parsing, and normalization. There are no obvious gaps for this narrow domain.
Maintenance
Related MCP Connectors
Experimental MCP server for current empirical verification of explicit public HTTPS endpoint claims.
Official SerpApi MCP server for Google, Bing, and other search engines.
Official PicSee MCP server for short links, link management, click analytics, and optional OAuth.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceThis read-only MCP Server allows you to connect to Pinterest data from Claude Desktop through CData JDBC Drivers. Free (beta) read/write servers available at https://www.cdata.com/solutions/mcp4MIT
- AlicenseBqualityDmaintenanceMCP server connector for Pinterest — search pins, manage boards, save pins, and follow users via Playwright browser automation.1014 npmMIT
- AlicenseAqualityDmaintenanceAn MCP server that lets Claude interact with Pinterest — browsing, creating, and managing boards, pins, sections, and user profiles via the Pinterest API v5.15260 npmMIT
- AlicenseAqualityCmaintenanceExtracts images, gifs, videos, and search results from Pinterest without authentication. Supports search, pin details, board pins, related pins, autocomplete, and media downloads.6260 npmMIT